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
则可以让网络请求继续进行 注意
:该功能将网络请求截获并修改过程中,整个网络请求的计时并不会暂停
,所以长时间的暂停可能
导致客户端的请求超时
- 示例: