Charles教程
将Charles设置成系统代理
第一次启动Charles会请求设置系统代理的权限- 你可以输入登录密码授予Charles该权限
你也可以忽略该请求,然后在需要将Charles设置成
系统代理时,选择菜单中的Proxy->Mac OS X Proxy来将Charles设置成系统代理。如下所示:
Charles主界面介绍

- Structure视图
- 将网络请求按访问的
域名分类
- 将网络请求按访问的
- Sequence视图
- 将网络请求按访问的
时间排序
- 将网络请求按访问的
Raw选项里显示的是原始数据
过滤网络请求
临时过滤- 在主界面的
中部的Filter栏中填入需要过滤出来的关键字 - 举例:要过滤出服务器的地址是:
http://xxx.com,那么只需要在Filter栏中填入xxx即可
- 在主界面的
快速临时过滤- 在想过滤的网络请求上
右击,选择Focus - 然后在
Filter栏勾选上Focussed一项,这样就只显示Focus过的网络请求,如下图:
- 在想过滤的网络请求上
经常过滤- 在
Charles的菜单栏选择Proxy->Recording Settings - 然后选择
Include栏,选择添加一个要过滤的记录,然后填入需要监控的协议、主机地址、端口号,这样就可以只截取目标网站的封包了,如下图:
- 在
截取本地(本机)上的网络封包
- 拦截
Chrome的网络请求Chrome默认走的是系统代理,当Charles获取了系统代理的权限后就可以拦截Chrome上的请求了- 如果
Chrome不是走系统代理,可以按如下设置来将其设置成系统代理:设置->显示高级设置->网络->更改代理服务器设置->如下图
- 拦截不了
Chrome请求的原因分析- 检查是否走的
系统代理,设置方式如上描述 - 由于使用了翻墙软件,导致
Charles拦截不到数据,例如:本人就使用了Lantern,就会勾选自动代理配置,如下图:
- 也有可能做了
过滤请求的设置,以为不拦截请求
- 检查是否走的
- 拦截
Safari的网络请求- 只要
Charles获取了系统代理的权限后就可以拦截Safari上的请求了 - 拦截不了
Safari请求的原因,主要就是看是否走的系统代理
- 只要
截取iPhone上的网络封包
Charles上的设置- 打开
Charles的代理功能,在Charles的菜单栏上选择Proxy->Proxy Settings,填入代理端口号(默认是8888),并且勾上Enable transparent HTTP proxying就完成了在Charles上的设置。如下图所示:
- 打开
iPhone上的设置- 获取电脑的IP地址,
Charles的顶部菜单的Help->Local IP Address,即可在弹出的对话框中看到 IP地址 - 在
iPhone的设置->无线局域网中,可以看到当前连接的wifi名,通过点击右边的详情键(如图
),可以看到当前连接上的wifi的详细信息,包括IP地址,子网掩码等信息。在其最底部有HTTP代理一项,我们将其切换成手动,然后填上Charles运行所在的电脑的IP,以及端口号(默认是8888),如下图所示:
- 获取电脑的IP地址,
- 设置好之后,打开
iPhone上的任意需要网络通讯的程序,就可以看到Charles弹出iPhone请求连接的确认菜单(如下图所示),点击Allow即可完成设置
截取Https通讯信息
- 安装Charles的
CA证书- 首先,我们需要在
Mac电脑上安装证书(如下图),然后输入系统的帐号密码,即可在KeyChain看到添加好的证书
- 需要
注意的是,即使是安装完证书之后,Charles默认也并不截取Https网络通讯的信息,如果想截取某个网站上的所有Https网络请求,可以在该请求上右击,选择SSL proxy(Http请求是不会显示此菜单项的),这样,对于该Host的所有SSL请求可以被截取到了,如下图:
- 首先,我们需要在
截取移动设备中的Https通讯信息
- 在
真机上安装相应的证书- 在
Charles中的菜单Help->SSL Proxying->Install Charles Root Certificate on a Mobile Device or Remote Browser,然后就可以看到Charles弹出的简单的安装教程,按照我们之前说的教程,在设备上设置好Charles为代理后,在手机浏览器中访问地址:http://charlesproxy.com/getssl,即可打开证书安装的界面,安装完证书后,就可以截取手机上的Https通讯内容了
- 在
- 在
模拟器上安装证书- 在
Charles中的菜单Help->SSL Proxying->Install Charles Root Certificate in iOS Simulators,然后就可以看到Charles弹出的简单的安装教程
- 在
需要注意,默认情况下Charles 并不做截取,你还需要在要截取的Https网络请求上右击选择SSL proxy菜单项
模拟慢速网络
- 在Charles的菜单上,选择
Proxy->Throttle Setting项,在之后弹出的对话框中,我们可以勾选上Enable Throttling,并且可以设置Throttle Preset的类型。如下图所示:
- 如果只想模拟
指定网站的慢速网络,可以再勾选上图中的Only for selected hosts项,然后在对话框的下半部分设置中增加指定的hosts项即可
修改网络请求内容,方便调试服务器接口
- 选中
指定网络请求上点击右键,选择Edit,即可创建一个可编辑的网络请求,如下图:
- 可以修改该请求的
任何信息,包括URL地址、端口、参数等,之后点击Execute即可发送该修改后的网络请求(如下图所示)
- Charles支持我们
多次修改和发送该请求,大大方便了服务器端接口调试
给服务器做压力测试
- 使用Charles的
Repeat功能来简单地测试服务器的并发处理能力 - 在想打压的网络请求上(
POST 或 GET请求均可)右击,然后选择Repeat Advanced菜单项,如下图:
- 设置打压的
并发线程数以及打压次数,确定后就开始打压,如下图:
修改服务器返回内容
- Charles提供了
Map功能、Rewrite功能以及Breakpoints功能Map功能适合长期将某些请求重定向到另一个网络地址或本地文件Rewrite功能适合对指定网络请求进行一些正则替换,适合做批量和长期的替换Breakpoints功能适合做一些临时性的修改
Map功能Map Remote- 在Charles的菜单中,选择
Tools->Map Remote即可进入到相应功能的设置页面 - 需要分别填写网络重定向的
源地址和目的地址,对于不需要限制的条件,可以留空 - 示例:将所有 ytk1.yuanku.ws(
测试服务器)的请求重定向到了 www.yuantiku.com(线上服务器),如下图:
- 在Charles的菜单中,选择
Map Local- 在Charles的菜单中,选择
Tools->Map Local即可进入到相应功能的设置页面 - 需要填写的重定向的
源地址和本地目标文件,对于有一些复杂的网络请求结果,我们可以先使用Charles提供的Save Response…功能,将返回结果保存到本地(如下图所示),然后稍加修改,成为我们的目标映射文件
- 示例:将一个指定的网络请求通过
Map Local功能映射到了本地的一个经过修改的文件中,如下图:
- 在Charles的菜单中,选择
Rewrite功能- 在Charles的菜单中,选择
Tools->Rewrite...即可进入到相应功能的设置页面,如下图:
- 设置要被Rewrite的请求,如下图:

- 设置Rewrite的规则

- 示例:客户端有一个API 请求是获得用户昵称,而我当前的昵称是
tangqiaoboy,试着直接修改网络返回值,将tangqiaoboy换成成iosboy。于是启用Rewrite功能,然后设置如下的规则- 设置规则前

- 设置规则

- 设置规则后

- 设置规则前
- 在Charles的菜单中,选择
Breakpoints功能注意:要拦截网络请求必须指定完整路径且路径末尾不要加/,否则拦截会失败,如下图:
当指定的网络请求发生时,Charles会截获该请求,这个时候,我们可以在Charles中
临时修改网络请求的返回内容- 修改完成后点击
Execute则可以让网络请求继续进行 注意:该功能将网络请求截获并修改过程中,整个网络请求的计时并不会暂停,所以长时间的暂停可能导致客户端的请求超时- 示例:
