Charles简介
Charles是什么?
是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当程序连接Charles的代理访问互联网时,Charles可以监控这个程序发送和接收的所有数据。它允许一个开发者查看所有连接互联网的HTTP通信,这些包括request、response和HTTP headers。
Charles界面功能介绍
左侧栏
Structure: 将网络请求按访问的域名分类
Sequence: 将网络请求按访问的时间排序
工具栏:
从左到右,一次为:
1、扫帚: 清除会话
2、圆: 开始/停止抓取会话
3、锁: 没啥用。
4、乌龟: 开启/关闭限流
5、六边形: 开启/关闭断点
6、笔: 编辑会话,然后执行
7、刷新箭头: 重新发一遍请求
8、勾勾: 验证会话
9、篮子: 跳转官网购买
10、扳手、齿轮: 一些其他功能的设置
Charles安装
官网下载地址: https://www.charlesproxy.com
Charles是收费软件,可以免费试用30天。试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过30分钟,并且启动时将会有10秒种的延时。
因此,该付费方案对广大用户还是相当友好的,即使你长期不付费,也能使用完整的软件功能。只是当你需要长时间进行封包调试时,会因为Charles强制关闭而遇到影响。
场景一: 抓取电脑网页上的网络请求
设置系统代理: Charles是通过将自己设置成代理服务器来完成抓包的,勾选系统代理后,系统本地发出去的请求都能被截取下来。
设置完系统代理后,网页上访问的请求就能被截取到了。
需要注意的是,Chrome 和 Firefox 浏览器默认并不使用系统的代理服务器设置,而 Charles是通过将自己设置成代理服务器来完成封包截取的,所以在默认情况下无法截取 Chrome 和 Firefox浏览器的网络通讯内容。如果你需要截取的话,在 Chrome 中设置成使用系统的代理服务器设置即可,或者直接将代理服务器设置成127.0.0.1:8888 也可达到相同效果。
场景二: 抓取移动设备上的网络请求包
1、设置代理端口
Proxy > Proxy Settings,默认端口是8888,根据实际情况可修改。勾选Enable transparent HTTP proxying。
2、查看本机IP地址: Help > Local Ip Address。
当然,你也可以直接到电脑的 设置 > 网络 中选中连接的wifi直接查看。
3、配置手机代理: 手机需要和电脑连接同一个Wifi,连接后点击Wifi右边的感叹号,进入Wifi详情页,滑动到底部,点击HTTP代理下面的配置代理,进入配置代理页,改为手动配置,然后填入服务器、端口等信息。
4、配置完手机代理后,打开需要抓包的app,请求就会发送到Charles,这时Charles会弹出一个Connection from的确认框,点击Allow就可以了。
5、当点击允许后,可以在Charles的Proxy > Access Control Settings里看到可以访问此代理服务器的列表。
这里第二个IP便是Charles允许访问的手机的IP地址。
注意: 如果第四部弹出确认框是手抖点了不允许,可以在Access Control Settings里手动添加手机的IP地址到允许访问列表里。或者重启Charles,手机再次启动app放松网络请求,会再次提示选择。
6、到这里,如果是抓取HTTP的包的话,基本OK了。如果要抓去HTTPS的包的话,还要经过一些额外配置,见下文。
抓取Https的额外配置
在不做任何证书配置的情况下,抓取Https看到的response是一堆乱码的字符。左侧Structure里看到的请求host也是一把锁的样子,点击展开后,下面的请求也都是一把锁,显示的<unknown>。
默认我们是看不到https的请求数据的。我们需要安装证书。一般需要如下两个步骤:
第一步: 配置电脑证书 (不配置好像也没问题)
1、在Charles的顶部菜单栏,选择 Help > SSL Proxying > Install Charles Root Certificate,就会把证书安装到电脑的钥匙串里。
打开钥匙串,钥匙串选择登录,种类选择证书,就可以看到安装的Charles证书了。
如果证书上有个红色的叉,是因为此证书不被信任,双击证书,展开信任那一栏,选择始终信任就可以了。信任完后,钥匙串看到的证书,红叉就会变成加号。
2、SSL Proxing > Install Charles Root Certificate on a Mobile Device or Remote Browser
第二步: 配置手机描述文件
-
下载描述文件。浏览器打开http://chls.pro/ssl,最好用手机自带的Safari打开,微信直接打开不会显示下载弹框。
-
安装描述文件。设置 > 通用 > 描述文件,点击右上角安装。
-
证书信任设置。设置 > 通用 > 关于本机 > 证书信任设置(滑倒底部才能看见),打开信任开关,在弹出的警告框点击继续就可以了。
注意: 如果不打开这个开关,在SSL Proxying Settings设置了Include的所有服务器地址都是无法请求到数据的。
虽然charles的根证书已经在安装列表中显示,但它是被关闭的。在iOS10.3之前,当你将安装一个自定义证书,iOS会默认信任,不需要进一步的设置。而iOS10.3之后,安装新的自定义证书默认是不受信任的。如果要信任已安装的自定义证书,需要手动打开开关以信任证书。
第二步: 配置要抓取的https请求。
1、Proxy > SSL Proxying Setting,点击add,把需要抓取的https请求的host添加进去就可以了(port可填可不填)。下图为抓取百度主页是填入的host。
抓取一个不认识的网站或者app时,如何确认host?
Structure那一排列表,截取https://后面的那一截就是了。
其他功能
1、过滤
大部分情况下网络请求数量很多,想要在众多请求里找到某个特定请求很难。可以使用如下几种方法过滤。
1)、临时过滤:
在Sequence界面的Filter栏中填入要过滤的关键字。当然也可以选中Structure,同一个域名下的请求,点击展开不同的请求都按文件夹分类好了的,结构很清晰。
2)、过滤:
在 Charles 的菜单栏选择 Proxy > Recording Settings,然后选择 Include 栏,选择Add,然后填入需要监控的协议,主机地址,端口号(Port可填可不填),这样就达到了过滤的目的。
3)、Focus:
在需要关注的请求上,右键,选择Focus,这是其他请求就会被放到Other Hosts里,也能达到过滤的目的。
2、模拟弱网环境(网络限速)
在Proxy->Throttle Setting,然后勾选Enable Throttling,在Throttle Preset下选择网络类型即可。如果只需要模拟制定域名的弱网,可以勾选Only for selected hosts项,在下面点击add,在框中填入指定host即可。
3、修改网络请求
有些时候为了调试服务器的接口,我们需要反复尝试不同参数的网络请求,看其是否都能正确返回数据。Charles 可以方便地提供网络请求的修改和重发功能。只需要选中以往的网络请求,工具栏中点击Edit(那只笔的图标),即可创建一个可编辑的网络请求。
4、服务器压测
Charles可以使用Repeat 功能来简单地测试服务器的并发处理能力。在想要压测的网络请求上,右键,选择Repeat Advanced。
我们项目服务端做了不能重复请求,最简单的就是两次请求的时间戳不能一样,如果服务器有做这个限制的话,这个压测基本就没意义了,因为每次都会返回异常code
5、断点
Breakpoints介绍: 当指定的网络请求发生时,Charles 会截获该请求,这个时候,我们可以在 Charles 中临时修改网络请求的返回内容。弊端是,如果开发设置了请求超时时间,那么修改的速度慢了往往即使返回了也没有效果。
选中要断点的请求,右键,选择BreakPoints。然后点击工具栏的断点按钮(六边形图标)。
这时后,app执行一下这个打了断点的请求,Charles会跳出一个Breakpoints的会话框来,这时如果需要篡改请求,就点击Edit Request,然后点击底部Execute按钮,这时候请求就发出去了,等结果回来是会多出一个Edit Respose的选项,选中这个选项,然后底部在选择JSON Text,就可以篡改返回结果了,改完后点击Execute,app上就会展示成你篡改后的数据。