首页 > 移动平台 > 详细

iOS开发——使用Charles进行http网络抓包详解

时间:2015-12-23 23:02:50      阅读:575      评论:0      收藏:0      [点我收藏+]

       我在之前一篇博客《网络抓包工具Charles的介绍与使用》中简单介绍了Charles的安装破解,以及进行简单的Charles抓包配置的介绍。今天我们来详细介绍下使用Charles进行http抓包,关于https抓包,我将会在另一篇博客中介绍。

(1)http抓包的配置,请参考《网络抓包工具Charles的介绍与使用》这篇博客。

(2)为了使抓包的结果清晰,便于调试,我写了一个简单的网络请求,通过点击按钮请求查询号码归属地,代码如下:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

}

- (IBAction)networkRequestPressed:(id)sender {

 NSString *urlAsString = [@"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=18888888888&userId=" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

  NSURL *url = [NSURL URLWithString:urlAsString];
  NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
  [urlRequest setTimeoutInterval:30];
  [urlRequest setHTTPMethod:@"GET"];

  //推荐使用这种请求方法;
  NSURLSession *session = [NSURLSession sharedSession];

  __block  NSString *result = @"";
  NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

    if (!error) {
      //没有错误,返回正确;
      result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
      NSLog(@"返回正确:%@",result);

    }else{
      //出现错误;
      NSLog(@"错误信息:%@",error);
    }

  }];

  [dataTask resume];

}

@end

(3)点击按钮进行网络请求后,返回结果如下:

技术分享


(4)下面开始进行抓包(如何配置请参考:网络抓包工具Charles的介绍与使用)。注意哦:需要在真机上测试!进行网络请求后,Charles输出如下:

技术分享


我现在对上面的http抓包结果进行详解。

【1】

技术分享

左侧是显示结构:Structure是树状结构显示,Sequence是水平结构显示。两者基本类似,我以树状结构来进行介绍。左侧的树状结构是我进行网络请求的url链接,每一个层级表示了以“/”隔开的子域名。通过上述的代码也可以看到我GET请求的url链接是:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=18888888888&userId=    ;与树状结构中显示的一致。

【2】

技术分享


右侧是详情页,其中第一个Overview是概览。我对一些字段进行介绍:

(1)URL:我进行网络请求的链接;

(2)Status:当前状态,complete表示请求完成;

(3)Responce Code:返回码。不同的接口,不同的请求结果,返回码都不同;

(4)Protocol:使用的协议;

(5)Method:请求方式,如GET请求,POST请求等;

(6)Kept Alive:判断当前是否正在链接(活跃);

(7)Content-Type:发送的内容类型,如这里用的是XML文本,以UTF8的方式发送;

(8)Client Address:客户端的IP地址;

(9)Remote Address:远程服务器的IP;


Timing:

(10)Request Start Time:请求开始的时间;

(11)Request End Time:请求结束的时间;

(12)Response Start Time:返回开始的时间;

(13)Response End Time:返回结束的时间;


Size:

(14)Request Header :请求的头部大小;

(15)Request Header:返回的头部大小;

(16)Request : 请求发送的大小;

(17)Response:返回数据的大小;

(18)Total:所有数据大小;

(19)Request Compression :请求压缩;

(20)Response Compression: 返回压缩;


【3】

技术分享


第二个页面是关于请求发送的。下面的Headers,Query String,Raw。

(1)Headers:发送请求的头部信息;

(2)Query String:发送参数列表;

(3)Raw:发送的原生数据,包括了头部和参数;


【4】

技术分享


右侧的Response的是关于所有返回信息的。

(1)Headers:是返回的头部信息;

(2)Text:返回信息(除去头部)后的文本;

(3)Hex:返回信息的16进制表示;

(4)XML:我返回的数据是XML。如果你返回的是JSON,这里就会显示JSON;

(5)XML Text:如果你返回JSON,这里会显示JSON Text;

(6)Raw:返回的所有原生数据,包括头部;


【5】

技术分享


里面是发送数据的一些简要信息。


【6】

技术分享


是一些简要信息的图表表示。


     现在我对Charles顶部的一些常用的工具栏做一个介绍:

(1)New Session:新建一个会话。也就是在一个新的Charles界面查看网络情况;

技术分享


(2)Open Session:打开一个之前保存的会话;

技术分享


(3)Close the current Session:关闭当前的会话;

技术分享


(4)Save the current Session:保存当前的会话;

技术分享


(5)Clear the current Session:清空当前的会话(比较方便,常用);

技术分享


(6)Find Text in the current session:相当于查找功能;

技术分享



      总结,通过Charles来抓包网络请求,让我们对项目的流程有一个大概的认识,这对于入手一个复杂的项目很有帮助。这也有利于我们测试网络情况,调试程序,监测性能。同时,网络抓包也不仅限于iOS的开发,也可以用在其他的开发领域中。当然,可能某些App存在所谓的后门,窃取你手机上的隐私,你是不是也可以通过抓包来判断呢?我将在下一篇博客中介绍如何进行Charles的https抓包。



github主页:https://github.com/chenyufeng1991  。欢迎大家访问!

最近极客学院Wiki正在进行IT职业技能图谱的制定,我主要负责iOS方向,大家感兴趣的可以一起参加,有问题或者修改可以直接给我发issues或者pull request。https://github.com/chenyufeng1991/skillmap  。


iOS开发——使用Charles进行http网络抓包详解

原文:http://blog.csdn.net/chenyufeng1991/article/details/50389174

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!