Charles是在Mac下经常使用的截取网络封包的工具,在作iOS开发时,咱们为了调试与服务器端的网络通信协议,经常须要截取网络封包来分析。Charles经过将本身设置成系统的网络访问代理服务器,使得全部的网络访问请求都经过它来完成,从而实现了网络封包的截取和分析。 json
Charles是收费软件,能够免费试用30天。试用期事后,未付费的用户仍然能够继续使用,可是每次使用时间不能超过30分钟,而且启动时将会有10秒种的延时。 后端
所以,该付费方案对广大用户仍是至关友好的,即便你长期不付费,也能使用完整的软件功能。只是当你须要长时间进行封包调试时,会由于Charles强制关闭而遇到影响。 服务器
Charles主要的功能包括: 网络
去Charles的官方网站(http://www.charlesproxy.com)下载最新版的Charles安装包,是一个dmg后缀的文件。打开后将Charles拖到Application目录 下即完成安装。 工具
若是你须要截取分析SSL协议相关的内容。那么须要安装Charles的CA证书。具体步骤以下: 测试
以前提到,Charles是经过将本身设置成代理服务器来完成封包截取的,因此使用Charles的第一步是将其设置成系统的代理服务器。 网站
启动Charles后,第一次Charles会请求你给它设置系统代理的权限。你能够输入登陆密码授予Charles该权限。你也能够忽略该请求,而后在须要将Charles设置成系统代理时,选择菜单中的 "Proxy" -> "Mac OS X Proxy"来将Charles设置成系统代理。以下所示: url
以后,你就能够看到源源不断的网络请求出如今Charles的界面中。 spa
Charles主要提供2种查看封包的视图,分别名为“Structure”和"Sequence"。 代理
你们能够根据具体的须要在这两种视图以前来回切换。
对于某一个具体的网络请求,你能够查看其详细的请求内容和响应内容。若是响应内容是JSON格式的,那么Charles能够自动帮你将JSON内容格式化,方便你查看。
一般状况下,咱们须要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。对于这种需求,咱们有2种办法。
在主界面的中部的Filter栏中填入须要过滤出来的关键字。例如咱们的服务器的地址是:http://yuantiku.com,那么只须要在Filter栏中填入yuantiku便可。
在Charles的菜单栏选择"Proxy"->"Recording Settings",而后选择Include栏,选择添加一个项目,而后填入须要监控的协议,主机地址,端口号。这样就能够只截取目标网站的封包了。以下图所示:
一般状况下,咱们使用方法1作一些临时性的封包过滤,使用方法2作一些常常性的封包过滤。
Charles一般用来截取本地上的网络封包,可是当咱们须要时,咱们也能够用来截取其它设备上的网络请求。下面我就以iPhone为例,讲解如何进行相应操做。
要截取iPhone上的网络请求,咱们首先须要将Charles的代理功能打开。在Charles的菜单栏上选择“Proxy”->"Proxy Settings",填入代理端口8888,而且勾上"Enable transparent HTTP proxying" 就完成了在Charles上的设置。以下图所示:
首先咱们须要获取Charles运行所在电脑的IP地址,打开Terminal,输入ifconfig en0, 便可得到该电脑的IP,以下图所示:
在iPhone的 “设置”->“无线局域网“中,能够看到当前链接的wifi名,经过点击右边的详情键,能够看到当前链接上的wifi的详细信息,包括IP地址,子网掩码等信息。在其最底部有“HTTP代理”一项,咱们将其切换成手动,而后填上Charles运行所在的电脑的IP,以及端口号8888,以下图所示:
设置好以后,咱们打开iPhone上的任意须要网络通信的程序,就能够看到Charles弹出iPhone请求链接的确认菜单(以下图所示),点击“Allow”便可完成设置。
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的开发和调试。
感谢李永伦对本文的审校。