转载

iOS # Charles拦截网络数据

iOS # Charles拦截网络数据

SpongeBob's Tech Space

生活:"When in doubt, use brute force." --Ken Thompson

  • 博客园
  • 首页
  • 新随笔
  • 联系
  • 订阅
  • 管理

随笔- 40  文章- 0  评论- 21 

iOS # Charles拦截网络数据

Charles

是在Mac下常用的截取网络封包的工具,在做iOS开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。Charles通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。

Charles主要的功能包括:

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

安装Charles & 介绍:

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

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

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

3、Charles封包的视图:“Structure” & "Sequence"

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

原文链接: http://www.devtang.com/blog/categories/ios/

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

TODO:

--收集 & 分享

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

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

2、 截取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

3、截取SSL信息:

Charles默认并不截取SSL的信息,如果你想对截取某个网站上的所有SSL网络请求,可以在该请求上右击,选择SSL proxy。

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

原因:在做iPhone开发的时候,我们常常需要模拟慢速网络或者高延迟的网络,以测试在移动网络下,应用的表现是否正常。

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

5、 修改网络请求内容

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

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

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

Charles支持我们多次修改和发送该请求,这对于我们和服务器端调试接口非常方便。

6、 过滤网络请求 《---- 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

posted @ 2015-05-19 10:14 √(´ε`.) 阅读( ... ) 评论( ... )编辑 收藏

刷新评论刷新页面返回顶部

博客园首页 博问 新闻 闪存 程序员招聘 知识库

Copyright ©2015 √(´ε`.)

$(function() { $(window).scroll(function() { if ($(window).scrollTop() > 1000) $('div.go-top').show(); else $('div.go-top').hide(); }); $('div.go-top').click(function() { $('html, body').animate({scrollTop: 0}, 1000); }); });
正文到此结束
Loading...