Charles 从入门到入
Charles 简介
Charles 是在 PC 端常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。
Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。
Charles 是收费软件,可以免费试用 30 天。试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过 30 分钟,并且启动时将会有 10 秒种的延时。因此,该付费方案对广大用户还是相当友好的,即使你长期不付费,也能使用完整的软件功能。只是当你需要长时间进行封包调试时,会因为 Charles 强制关闭而遇到影响。
Charles 主要的功能包括(下载地址):
- 截取 Http 和 Https 网络封包。
- 支持重发网络请求,方便后端调试。
- 支持修改网络请求参数。
- 支持网络请求的截获并动态修改。
- 支持模拟慢速网络。
Charles 使用教程
通过 Charles 进行 PC 端抓包
Charles 会自动配置浏览器和工具的代理设置,所以说打开工具直接就已经是抓包状态了。只需要保证一下几点即可:
- 确保 Charles 处于 Start Recording 状态。
- 勾选 Proxy | Windows Proxy 和 Proxy | Mozilla FireFox Proxy。
通过 Charles 进行移动端抓包
手机抓包的原理,和 PC 类似,手机通过把网络委托给 Charles 进行代理与服务端进行对话。具体步骤如下:
- 使手机和电脑在一个局域网内,不一定非要是一个 IP 段,只要是在同一个路由器下即可。
- 电脑端配置:
- 关掉电脑端的防火墙(这点很重要)
- 打开 Charles 的代理功能:通过主菜单打开 Proxy | Proxy Settings 弹窗,填入代理端口(端口默认为
8888
,不用修改),勾选Enable transparent HTTP proxying
。 - 如果不需要抓取电脑上的请求,可以取消勾选 Proxy | Windows Proxy 和 Proxy | Mozilla FireFox Proxy。
- 手机端配置:
- 通过 Charles 的主菜单 Help | Local IP Address 或者通过命令行工具输入
ipconfig
/ifconfig
查看本机的 IP 地址 - 设置代理:打开手机端的 WIFI 代理设置,输入电脑 IP 和 Charles 的代理端口。
- 通过 Charles 的主菜单 Help | Local IP Address 或者通过命令行工具输入
- 设置好之后,我们打开手机上的任意需要网络请求的程序,就可以看到 Charles 弹出手机请求连接的确认菜单(只有首次弹出),点击
Allow
即可完成设置。
通过 Charles 进行 HTTPS 抓包
HTTPS 的抓包需要在 HTTP 抓包基础上再进行设置。需要完成一下步骤:
- 完成 HTTP 抓包配置
- 电脑端安装 Charles 证书:通过 Charles 的主菜单 Help | SSL Proxying | Install Charles Root Certificate 安装证书
- 设置 SSL 代理:通过主菜单打开** Proxy | SSL Proxy Settings** 弹窗,勾选
Enable SSL proxying
- 移动端安装 Charles 证书: 通过 Charles 的主菜单 Help | SSL Proxying | Install Charles Root Certificate on a Mobile Device or Remote Browser 安装证书
- 设置好之后,我们打开手机上的任意需要网络请求的程序,就可以看到 Charles 弹出手机请求连接的确认菜单(只有首次弹出),点击
Allow
即可完成设置。
过滤网络请求
通常情况下,我们需要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。对于这种需求,以下几种办法:
- 在主界面的中部的 Filter 栏中填入需要过滤出来的关键字。例如我们的服务器的地址是:https://www.ruan89.cn/ , 那么只需要在 Filter 栏中填入 survey 即可
- 在 Charles 的菜单栏选择 Proxy”–>“Recording Settings ,然后选择 Include 栏,选择 add 一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。
- 在想过滤的网络请求上右击,选择 Focus,之后在 Filter 一栏勾选上 Focussed 一项,这种方式可以临时性的,快速地过滤出一些没有通过关键字的一类网络请求。
通常情况下,我们使用第一种方法做一些临时性的封包过滤,使用第二种方法做一些经常性的封包过滤。
修改网络请求内容
有些时候为了调试服务器的接口,我们需要反复尝试不同参数的网络请求。Charles 可以方便地提供网络请求的修改和重发功能。只需要在以往的网络请求上点击右键,选择 Compose,即可创建一个可编辑的网络请求
我们可以修改该请求的任何信息,包括 URL 地址、端口、参数等,之后点击 Execute 即可发送该修改后的网络请求。Charles 支持我们多次修改和发送该请求,这对于我们和服务器端调试接口非常方便。
修改服务器返回内容
Charles 提供了 Map
功能、 Rewrite
功能以及 Breakpoints
功能,都可以达到修改服务器返回内容的目的。这三者在功能上的差异是:
Map
功能适合长期地将某一些请求重定向到另一个网络地址或本地文件在 Charles 的菜单中,选择 “Tools” –> “Map Remote” 或 “Map Local” 即可进入到相应功能的设置页面
Rewrite
功能适合对网络请求进行一些正则替换Breakpoints
功能适合做一些临时性的修改使用 Breakpoints 功能将网络请求截获并修改过程中,整个网络请求的计时并不会暂停,所以长时间的暂停可能导致客户端的请求超时
模拟慢速网络
- 在 Charles 的菜单上,选择 Proxy | Throttle Setting 项,在之后弹出的对话框中,我们可以勾选上 Enable Throttling,并且可以设置 Throttle Preset 的类型
- 如果我们只想模拟指定网站的慢速网络,可以再勾选上图中的 Only for selected hosts 项,然后在对话框的下半部分设置中增加指定的 hosts 项即可