iOS开发工具——网络封包分析工具Charles


简介

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

Charles是收费软件,能够免费试用30天。试用期事后,未付费的用户仍然能够继续使用,可是每次使用时间不能超过30分钟,而且启动时将会有10秒种的延时。 后端

所以,该付费方案对广大用户仍是至关友好的,即便你长期不付费,也能使用完整的软件功能。只是当你须要长时间进行封包调试时,会由于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

去Charles的官方网站(http://www.charlesproxy.com)下载最新版的Charles安装包,是一个dmg后缀的文件。打开后将Charles拖到Application目录 下即完成安装。 工具

安装SSL证书

若是你须要截取分析SSL协议相关的内容。那么须要安装Charles的CA证书。具体步骤以下: 测试

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

  3. 从钥匙串访问中便可看到添加成功的证书。以下所示:

 

将Charles设置成系统代理

以前提到,Charles是经过将本身设置成代理服务器来完成封包截取的,因此使用Charles的第一步是将其设置成系统的代理服务器。 网站

启动Charles后,第一次Charles会请求你给它设置系统代理的权限。你能够输入登陆密码授予Charles该权限。你也能够忽略该请求,而后在须要将Charles设置成系统代理时,选择菜单中的 "Proxy" -> "Mac OS X Proxy"来将Charles设置成系统代理。以下所示: url

以后,你就能够看到源源不断的网络请求出如今Charles的界面中。 spa

Charles主界面介绍

Charles主要提供2种查看封包的视图,分别名为“Structure”和"Sequence"。 代理

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

你们能够根据具体的须要在这两种视图以前来回切换。

对于某一个具体的网络请求,你能够查看其详细的请求内容和响应内容。若是响应内容是JSON格式的,那么Charles能够自动帮你将JSON内容格式化,方便你查看。

过滤网络请求

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

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

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

一般状况下,咱们使用方法1作一些临时性的封包过滤,使用方法2作一些常常性的封包过滤。

截取iPhone上的网络封包

Charles一般用来截取本地上的网络封包,可是当咱们须要时,咱们也能够用来截取其它设备上的网络请求。下面我就以iPhone为例,讲解如何进行相应操做。

Charles上的设置

要截取iPhone上的网络请求,咱们首先须要将Charles的代理功能打开。在Charles的菜单栏上选择“Proxy”->"Proxy Settings",填入代理端口8888,而且勾上"Enable transparent HTTP proxying" 就完成了在Charles上的设置。以下图所示:

iPhone上的设置

首先咱们须要获取Charles运行所在电脑的IP地址,打开Terminal,输入ifconfig en0, 便可得到该电脑的IP,以下图所示:

在iPhone的 “设置”->“无线局域网“中,能够看到当前链接的wifi名,经过点击右边的详情键,能够看到当前链接上的wifi的详细信息,包括IP地址,子网掩码等信息。在其最底部有“HTTP代理”一项,咱们将其切换成手动,而后填上Charles运行所在的电脑的IP,以及端口号8888,以下图所示:

设置好以后,咱们打开iPhone上的任意须要网络通信的程序,就能够看到Charles弹出iPhone请求链接的确认菜单(以下图所示),点击“Allow”便可完成设置。

截取SSL信息

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

这样,对于该Host的全部SSL请求能够被截取到了。

模拟慢速网络

在作iPhone开发的时候,咱们经常须要模拟慢速网络或者高延迟的网络,以测试在移动网络下,应用的表现是否正常。Charles对此需求提供了很好的支持。

在Charles的菜单上,选择"Proxy"->"Throttle Setting"项,在以后弹出的对话框中,咱们能够勾选上“Enable Throttling”,而且能够设置Throttle Preset的类型。以下图所示:

若是咱们只想模拟指定网站的慢速网络,能够再勾选上图中的"Only for selected hosts"项,而后在对话框的下半部分设置中增长指定的hosts项便可。

修改网络请求内容

有些时候为了调试服务器的接口,咱们须要反复尝试不一样参数的网络请求。Charles能够方便地提供网络请求的修改和重发功能。只须要在以往的网络请求上点击右键,选择“Edit”,便可建立一个可编辑的网络请求。以下所示:

咱们能够修改该请求的任何信息,包括url地址,端口,参数等,以后点击“Execute”便可发送该修改后的网络请求(以下图所示)。Charles支持咱们屡次修改和发送该请求,这对于咱们和服务器端调试接口很是方便。

总结

经过Charles软件,咱们能够很方便地在平常开发中,截取和调试网络请求内容,分析封包协议以及模拟慢速网络。用好Charles能够极大的方便咱们对于带有网络请求的App的开发和调试。


感谢李永伦对本文的审校。

相关文章
相关标签/搜索