iOS # Charles拦截封包

Charles

  是在Mac下经常使用的截取网络封包的工具,在作iOS开发时,咱们为了调试与服务器端的网络通信协议,经常须要截取网络封包来分析。Charles经过将本身设置成系统的网络访问代理服务器,使得全部的网络访问请求都经过它来完成,从而实现了网络封包的截取和分析。html

  

Charles主要的功能包括:ios

  1. 支持SSL代理。能够截取分析SSL的请求。
  2. 支持流量控制。能够模拟慢速网络以及等待时间(latency)较长的请求。
  3. 支持AJAX调试。能够自动将json或xml数据格式化,方便查看。
  4. 支持AMF调试。能够将Flash Remoting 或 Flex Remoting信息格式化,方便查看。
  5. 支持重发网络请求,方便后端调试。
  6. 支持修改网络请求参数。
  7. 支持网络请求的截获并动态修改。
  8. 检查HTML,CSS和RSS内容是否符合W3C标准

 

安装Charles & 介绍:git

一、官方网站(http://www.charlesproxy.com)下载最新版的Charles安装包;github

二、如须要截取分析SSL协议相关的内容。那么须要安装Charles的CA证书。具体步骤以下:json

  1. 去 http://www.charlesproxy.com/ssl.zip 下载CA证书文件。
  2. 解压该zip文件后,双击其中的.crt文件,这时候在弹出的菜单中选择“老是信任”

三、Charles封包的视图:“Structure” & "Sequence"后端

  1. Structure视图将网络请求按访问的域名分类。
  2. Sequence视图将网络请求按访问的时间排序。

 

原文连接:http://www.devtang.com/blog/categories/ios/数组

 

-------------服务器

TODO:

  --收集 & 分享网络

一、下载Charles抓包工具(iOS):--已经破解,可直接使用!工具

  下载地址:http://yun.baidu.com/s/1GvxaY

 

二、截取iPhone上的网络封包: 《------Main

 1.[Clarles设置]将Charles的代理功能打开。在Charles的菜单栏上选择 “Proxy”->"Proxy Settings"

  填入代理端口8888,而且勾上"Enable transparent HTTP proxying" 就完成了在Charles上的设置。

 2.[iPhone设置]将获取到的电脑IP地址(终端$ifconfig en0--查看网卡en0的IP地址),在iPhone手机同一局域网下,设置HTTP代理协议

  填入电脑的IP,而且写入端口8888

 

三、截取SSL信息:

  Charles默认并不截取SSL的信息,若是你想对截取某个网站上的全部SSL网络请求,能够在该请求上右击,选择SSL proxy。

 

四、模拟慢速网络获取数据:

  缘由:在作iPhone开发的时候,咱们经常须要模拟慢速网络或者高延迟的网络,以测试在移动网络下,应用的表现是否正常。

  TODO:在Charles的菜单,选择"Proxy"->"Throttle Setting"项,勾选上“Enable Throttling”,而且能够设置Throttle Preset的类型。

 

五、修改网络请求内容

  有些时候为了调试服务器的接口,咱们须要反复尝试不一样参数的网络请求。

  Charles提供:“网络请求的修改”和“重发”功能。只须要在以往的网络请求上点击右键,选择“Edit”,便可建立一个可编辑的网络请求。

 

PS:咱们能够修改该请求的任何信息,包括url地址,端口,参数等,以后点击“Execute”便可发送该修改后的网络请求(以下图所示)。

   Charles支持咱们屡次修改和发送该请求,这对于咱们和服务器端调试接口很是方便。

 

六、过滤网络请求《----Main

一般状况下,咱们须要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。对于这种需求,咱们有2种办法。

  1. 在主界面的中部的Filter栏中填入须要过滤出来的关键字。例如咱们的服务器的地址是:http://www.baidu.com,那么只须要在Filter栏中填入baidu便可。

  2. 在Charles的菜单栏选择"Proxy"->"Recording Settings",而后选择Include栏,选择添加一个项目,而后填入须要监控的协议,主机地址,端口号。这样就能够只截取目标网站的封包了

  TODO:[“Proxy”->“Recording Setting”->“Include”->“Add”->填写内容:http, baidu.com, 80

 

--------------------

 “网易新闻”--数据拦截: 

  [ c.m.163.com/nc/article/headline/T1348647853363/0-100.html ]

- (void)loadData {
    NSURL *url = [NSURL URLWithString:@"http://c.m.163.com/nc/article/headline/T1348647853363/0-20.html"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
       
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
//        NSLog(@"%@", dict);
        
        // 拿到字典中第一项的数组
        // 使用 keyEnumerator.nextObject 能够快速遍历字典的键值
        NSLog(@"%@", dict.keyEnumerator.nextObject);
        
        // 取字典键值的小技巧,对于网易新闻,能够直接过滤掉第一层字典
        NSArray *array = dict[dict.keyEnumerator.nextObject];
        NSLog(@"%@", array);
        
        // 遍历数组,字典转模型
        NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:array.count];
        
        [array enumerateObjectsUsingBlock:^(NSDictionary *dict, NSUInteger idx, BOOL *stop) {
            News *news = [News newsWithDict:dict];
            
            [arrayM addObject:news];
            
            NSLog(@"%@", news.objectInfo);
        }];
    }];
}

 

|--> Copyright (c) 2015 Bing Ma.

|--> GitHub RUL: https://github.com/SpongeBob-GitHub

相关文章
相关标签/搜索