charles 开发攻略
1 Charles 简介
Charles 是一个支持多平台的 HTTP 代理器、HTTP 监控工具,它能够让开发者查看本地机器与互联网之间的所有 HTTP 以及 HTTPS 传输数据。包括请求数据、响应数据 以及 HTTP 头部信息(包括 Cookie 和缓存信息)。
1.1 Charles 主要功能
支持SSL代理,可以截取分析SSL的请求;
支持模拟慢速网络;
支持重发网络请求,方便压测调试;
支持修改网络请求参数;
支持网络请求的截获和动态修改。
1.2 Charles 基本原理
Charles实现对HTTPS进行抓包使用的原理——中间人技术(man-in-the-middle)。Charles会动态生成一个使用自己根证书签名的证书,Charles接收服务器的证书,而客户端/浏览器接收Charles生成的证书,以此客户端和Charles之间建立HTTPS连接,Charles和Web服务器之间建立HTTPS连接,实现对HTTPS传输信息的抓包。

1.3 使用Charles抓取设备的请求
1.3.1 PC配置方式
首先在电脑上安装Charles证书:菜单栏找到 Help - SSL Proxying - Install Charles Root Certificate 安装证书。

并将证书设置为信任:

1.3.2 无线端配置方式
如需抓取手机端的HTTPS请求,需要在手机上安装相应证书:
打开 iPhone 设置 - 无线局域网,将手机网络连接到与电脑相同WiFi。点击WiFi详情按钮设置HTTP代理,将其改为手动,然后填写Charles所在电脑的代理IP地址,端口号默认为8888

找到Help - SSL Proxying - Install Charles Root Certificate on a Mobile Device or Remote Browser.. 然后用浏览器打开提示上面的地址下载证书。


打开手机设置—通用—描述文件与设备管理下,找到证书文件按照提示点击安装

安装完成后证书默认是没有被信任的,需要开启信任。具体操作步骤:通用—关于本机—证书信任设置:

回到Charles,因为Charles默认不监听HTTPS请求,所以还需要开启SSL代理功能:在Proxy - SSL Proxying Setting中激活,即勾选 Enable SSL Proxying 选项。并添加域名端口,匹配想要监听的域名端口,这里可以添加*:443匹配全部HTTPS请求:

然后就可以随意抓HTTPS包啦!
2 功能介绍
2.1 视图模式
Charles支持两种试图模式,Structure和Sequence:

Structure:可以很清晰的看到请求的数据结构,而且是以域名划分请求信息的,可以很清晰的去分析和处理数据。
Sequence:可以很清晰的看到全部请求,不用一层一层的去点开,这里是以数据请求的顺序去执行的,也就是说那个请求快就在前面显示。
2.2 重复请求
使用Repeat Advanced 还可以指定请求次数,可以用来对接口进行压测。



2.3 过滤网络
对网络请求进行过滤,只监控向指定服务器发送的请求。
在菜单栏选择 Proxy - Recording Setting。然后选择Include,选择添加一个行,然后填入需要监控的协议、主机地址、端口号,即可监控指定服务器的请求。

2.4 Focus功能
使用 Focus 功能指定想要查看的域名,可以避免这个域名相关的请求淹没在茫茫请求当中。 对想要Focus的域名,右键菜单-选择Focus,这个域名就会添加到Focused列表,可以在这里找到:

2.5 控制网速
在Charles的菜单上,选择Proxy-Throttle Setting,在弹出的对话框中,可以选择勾选上Enable Throttling,并且可以设置Throttle Preset的类型。

如果只想模拟指定网站的慢速网络,可以再勾选图中Only for selected hosts选项。
2.6 构造请求
点击compose按钮,就可以修改该请求的任何信息,包括URL、端口,参数等,执行就得到想要的报文了:



2.7 断点拦截
首先开启断点功能,然后再到想要设置断点的请求上,右键设置一个断点,如图所示:

再次发起这个断点加入到断点设置面板,可以根据需要修改请求报文然后执行:

执行后将会拦截响应,同样可以在响应返回到客户端之前根据需要修改响应报文:

再次执行后,响应将被修改。

2.8 重写功能
Rewrite 可以通过正则表达式匹配的方式——添加、修改、删除请求或响应中的头部header参数、主体内容、请求参数、响应状态等等功能强大、配置简单。
例如用Rewrite注入一个Script脚本,在菜单栏找到Tools-Rewrite 打开设置面板

我们想要的脚本就被写到页面上了,效果如下:

2.9 Map Local/Remote
将某个请求进行重定向,用重定向后的内容来响应请求的内容


3 实战应用
网友评论