Charles 是常用的网络封包截取工具,在做移动开发时,为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。
Charles 具体的功能介绍如下:
1.过滤网络请求
通常,我们只需要监控向指定目标服务器上发送的请求。对于这种需求,有以下几种办法:
方法一:在 Charles 的菜单栏选择 Proxy->Recording Settings,然后选择 Include ,点击Add,然后填入需要监控的协议,主机地址,端口号等,这样就可以只截取目标网站的请求了。
方法二:在目标网址上右键,选择focus,这样其他的请求就被放到一个叫other host的文件夹里面,也达到了过滤的目的。
方法三:选择sequence视图,在主界面的 Filter 栏中填入需要过滤出来的关键字即可。
通常情况下,我们使用方法一和方法二做一些经常性的封包过滤,使用方法三做一些临时性的封包过滤。
2.截取https请求
如果需要截取分析 Https 协议相关的内容,则需要安装 Charles 的 CA 证书。
首先需要在 Windows 电脑上安装证书。点击 Charles 的顶部菜单,选择 “Help” -> “SSL Proxying”->“Install Charles Root Certificate”,操作如下:
下一步,完成即可。
安装完成证书之后,Charles 默认也并不截取 Https 网络通讯的信息,此时需要右键选择Enable SSL Proxying,对于该 Host 的所有 SSL 请求就可以被截取到了。也可以在菜单“Proxy”->“SSL Proxying Settings…”中设置具体的host及端口号(*.*代表所有)。
3.截取手机上的网络请求
Charles 可以截取本地电脑上的网络请求,也可以截取手机上的网络请求。首先使手机和电脑在一个局域网内,不一定非要是一个ip段,只要是同一个路由器下就可以了。
Charles 上的设置:
要截取 iPhone 上的网络请求,我们首先需要将 Charles 的代理功能打开。在 Charles 的菜单栏上选择 “Proxy”->“Proxy Settings”,填入代理端口 8888(端口可改),并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的设置。如下图所示:
手机上的设置:
首先需要获取 Charles 运行所在电脑的 IP 地址:Charles 的顶部菜单 “Help”->“SSL Proxying” ->“Install Charles Root Certificate on a Mobile Device or Remote Browser ”,即可在弹出的对话框中看到 IP 地址,如下图所示:
在手机上连接上和电脑在同一局域网的网络,设置HTTP代理。
然后在手机上随便打开一个网址, Charles会弹出一个框让你确认是否代理,点击allow,这时就会在Charles上发现手机上的请求了。
如果要抓取手机设备上的HTTPS请求,需要在手机上也安装一个证书,在手机浏览器输入这个网址:chls.pro/ssl ,下载安装。安装成功后,需要信任该证书,点击设置—通用—关于本机—证书信任设置 ,启用即可:
修改服务器返回内容
有时我们想让服务器返回一些指定的内容,方便调试一些特殊情况。例如列表页面为空的情况,数据异常的情况,部分耗时的网络请求超时的情况等。根据具体的需求,Charles 提供了 Map 功能、Rewrite 功能和 Breakpoints 功能,都可以达到修改服务器返回内容的目的。三者在功能上的差异是:
- Map 功能适合长期地将某一些请求重定向到另一个网络地址或本地文件。
- Rewrite 功能适合对网络请求进行一些正则替换。
- Breakpoints 功能适合做一些临时性的修改。
4.Map网络重定向
Charles 的 Map 功能分 Map Remote 和 Map Local 两种,Map Remote 是将指定的网络请求重定向到另一个网址请求地址,Map Local 是将指定的网络请求重定向到本地文件。
Map Remote:
选择 “Tools”–>“Map Remote” ,进入到相应的设置页面。需要分别填写网络重定向的源地址和目的地址,对于不需要限制的条件,可以留空。
Map Local :
选择 “Tools”–>“Map Local” ,进入到相应的设置页面。需要填写重定向的源地址和本地的目标文件。它的一个重要用途是实现接口数据的修改。对于有一些复杂的网络请求结果,我们可以先使用 Charles提供的 “Save Response…” 功能,将请求结果保存到本地,然后稍加修改,成为我们的目标映射文件。
请求该接口,访问到的数据就是本地文件的数据了(将本地数据传回前端请求)。在进行接口调试的时候,我们可以修改文件,这样就不用每次都打断点修改数据了。
5.Rewrite内容替换
有时候我们需要测试请求的参数不同是否会带来不同的返回结果,以确认是否达到业务需求,或者需要不同的返回结果来验证我们对数据的处理是否正确。通过Charles,我们可以自己把控接口返回来的内容,比如数据的空与否,数据的长短等等。
操作步骤:
(1)先请求一次接口,右键接口选择Viewer Mappings,这样可以获取到接口的各种信息。
(2)打开菜单Tools->Rewrite Settings下,根据刚才的信息,添加location。
(3)增加需要替换的内容,将返回数据中的code从200替换为202,保存。
(4)重新执行该接口,返回值code变为了202。
6.Breakpoints断点
当指定的网络请求发生时,Charles 会截获该请求,这个时候,我们可以在 Charles 中临时修改网络请求或返回的内容。
注意,使用 Breakpoints 功能将网络请求截获并修改过程中,整个网络请求的计时并不会暂停,所以长时间的暂停可能导致客户端的请求超时。
7.批量重复提交请求(压力测试)
Charles 的 Repeat 功能可以简单地测试服务器的并发处理能力。
(1)选中需要重复提交的接口,右键选择Repeat Advanced
(2)Repeat Advanced页面参数:
repeat 1 request:需要重复的接口数
intertions:每个接口重复发送的次数
concurrency:并发数
show results in new session:勾选后,点击OK按钮会重新打开session页面
repeat delay:重复请求之间的时间间隔,单位ms,勾选use ranges让请求的间隔时间在某个范围内
输入迭代次数及并发数,点击OK:
(3)结果:调用了三次接口
8.模拟慢速网络
在做移动开发或测试时,常常需要模拟慢速网络或者高延迟的网络下,应用的表现是否正常。Charles 对此需求提供了很好的支持。
在 Charles 的菜单上,选择 “Proxy”->“Throttle Settings…”,在之后弹出的对话框中,勾选 “Enable Throttling”,并且可以设置 Throttle Preset 的类型。如下图所示:
如果只想模拟指定网站的慢速网络,可以再勾选图中的 “Only for selected hosts” 项,然后增加指定的 hosts 项即可。