charles中文名叫青花瓷,是一款基于HTTP协议的代理服务器。通过电脑或浏览器的代理来截取请求和请求结果,达到抓包并进行数据分析的目的。charles可以截取HTTP和HTTPS的网络封包,支持重发网络请求、修改网络请求参数、流量控制等场景
安装
由于本人的电脑win10系统,所以本章只在win10上进行练习,其他的系统不考虑
官网下载地址:https://www.charlesproxy.com/download/
下载后直接双击安装即可
界面介绍
常用功能
主界面
主导航栏中的图标
- 清空:第一个图标,是一个扫把形状的,左键单击可以清空捕获到的所有请求
- 开始/停止:第二个图标是个圆环,点击可以开始/停止捕获请求,显示灰色时,表示没有在捕获请求,点击开始捕获,如果显示的是红色,则表示再捕获请求中,点击可以停止捕获
- SSL Proxying:第三个图标类似于锁,点击可关闭/打开SSL Proxying。
- 慢速网络:第四个是个乌龟的图标,我们知道乌龟是比较慢的,这个代表开启或关闭慢速网络
- 断点设置:第五个是个六角环,点击可开启或关闭断点
- 修改数据:第六个是个笔的图标,点击可修改数据
- 重发:第七个是个曲线箭头图标,点击可以重新发送请求
- 校验:第八个是个绿色打勾的图标,校验返回的请求
HTTP/HTTPS抓包
如果想要抓取到客户端的HTTP请求,则需要运行Charles并配置代理,且客户端上也配置代理
charles配置代理
路径:主导航栏的Proxy -> Proxy Settings…
客户端代理配置
win10系统代理配置
本人只有win10系统,故展示win10下系统的代理配置
在win10系统配置代理之后,系统内的所有http/https请求都会发给charles代理,然后charles代理将请求发送出去并等待响应报文返回,然后将返回的响应返回给win10系统。
浏览器配置
有时候我们是电脑端的web页面,并不想抓取整个系统的请求,只想抓取浏览器访问目的网页的请求,可以在浏览器中设置代理
chrome浏览器默认使用了系统的代理,可以参照 win10系统代理配置 进行配置。firefox可以单独设置代理服务器,如下:
配置之后,如果Windows Proxy前有打勾,就单击去掉,不然还是会将整个windows的请求都抓取了
配置OK之后,系统中就只有firefox浏览器将自己的请求发送到了指定的代理(charles),所以charles只抓取了firefox浏览器的请求,其他应用的请求如果没有配置走charles代理,则都不会被抓取到。
访问控制 Access Control Settings
路径:主导航栏的Proxy -> Access Control Settings…
Access Control Settings是控制哪些IP可以访问charles代理。如果在配置的IP列表内,则对应的客户端的请求如果配置了走charles代理,则客户端请求可以直接正常请求。如果客户端所在设备IP并没有在IP列表中,则根据是否勾选Prompt to allow unauthorized connections
的逻辑进行处理
- 有勾选:
- 客户端所在设备IP在IP Range中,请求正常;
- 客户端所在设备IP不在IP Range中,charles会弹出弹窗,我们需要选择拒绝还是同意该设备IP的请求,如果我们选择Deny,则表示拒绝,客户端访问异常;如果我们Allow,即同意该设备IP的访问,Charles会将该IP自动添加到Access Control Settings的IP Range中,设备的请求正常发送。
- 无勾选:
- 客户端所在设备IP在IP Range中,请求正常;
- 客户端所在设备IP不在IP Range中,charles拒绝该请求的访问,请求异常
当勾选了Prompt to allow unauthorized connections
,且设备的IP不在IP Range中时,设备的请求访问charles代理时, charles会弹出如下弹窗,需要用户自行选择拒绝还是同意该设备的访问
windows证书配置
如果没有配置证书的话,客户端的https请求访问charles代理时,会显示类似于“该网站的安全证书有问题”的警告,如果客户端或服务器对证书有处理的话,会请求异常。
windows证书的配置步骤如下:
https代理设置
有时候我们要抓取https请求,这个需要进行配置,路径:Proxy -> SSL Proxying Settings… -> SSL Proxying -> 勾选Enable SSL Proxying
注意:如果弹窗中的Include没有数据,则手动添加上:Host和Port均为*
,或者Host为*
Port为443(https端口是443,http是80),
流量设置
charles提供了Throttle Settings配置,比如网速、稳定性、可靠性等字段,来模拟各种需要的网络环境
路径:Proxy -> Throttle Settings…
相关字段解释:
选项 | 说明 |
---|---|
Enable Throttling | 是否开启流量控制,勾选时表示开启流量控制,勾选后,其他流量控制参数是可编辑状态 |
Only for selected hosts | 勾选状态时,只对 添加的hosts做网速限制,未勾选时,对所有请求做网速限制 |
Throttle perset | 预设的网络模拟场景,选择某个之后,部分参数会随着变动 |
Bandwidth | 带宽,控制数据传输速度。Download指下载速度(从网络撒谎给你下载下来的速度),Upload是上传速度(把数据上传到网络上的速度) |
Utilisation | 可用率,表示带宽的百分比,作为带宽的缩放因子,对于大多数现代互联网连接利用率始终是100% |
Round-trip Latency | 往返延迟,网络请求发起时,延迟多长时间服务端才收到请求,单位是ms,比如如果是40,则客户端发起请求后,服务端至少40ms才能收到请求 |
MTU | 最大传输单位(字节byte),即TCP包的最大size,可以更真实模拟TCP层每次传输的分包情况 |
Reliability | 可靠性,指连接的可靠性,衡量连接完全失败的可能性。,模拟网络不稳定,即丢包的场景;可靠性是指定为成功发射10kib消息的可能性,所以,值为50%意味着所有10kib传输,有50%的概率会全部传输成功 |
Stability | 连接稳定性, 连接的质量会在不稳定的质量范围内随机下降,作为另一个缩放因子的可用带宽参数,主要用于模拟移动网络或其他设备的网络抖动情况 |
Unstable quality range | 不稳定质量范围,针对于Stability中设置中的范围 |
注意:
- 不要相信测速软件的检测,还是需要自己去真实的访问并查看才行
- 在主导航栏中,有个乌龟的图标,点击可以直接打开或关闭流量控制功能
断点并修改数据
charles作为一个“中间商”,可以对请求数据和响应数据进行修改;修改数据的前提是要设置断点,设置断点的方法有2个:
- 直接在请求中设置断点
- 在窗口中选择某个请求或某个请求组织结构,鼠标右键,选择Breakpoints,则当前请求或请求组织结构的后续请求的请求和响应都会被截断
- Breakpoint Settings设置
- 路径:Proxy -> Breakpoint Settings…
- 其实前一个方式设置的断点也会在Breakpoint Settings设置显示
- Edit Breakpoint中中的字段是对接口进行过滤:
- Scheme:我也不知道,就没设置,弄成空的
- Protocol:有空、https、http可选,即根据协议对对应的请求进行过滤,比如只断点https请求等
- Host:对接口域名进行过滤来设置断点,可以使用正则表达式进行匹配,比如https://httpbin.org/get?name=温小八&age=18的域名就是httpbin.org
- Port:根据端口过滤来设置断点
- Path:根据接口路径过滤设置断点,可以使用正则表达式进行匹配,如https://httpbin.org/get?name=温小八&age=18的接口路径是/get
- Query:对匹配的参数进行断点,可以使用正则表达式进行匹配
- Request和Response:表示该断点配置是对请求生效还是响应生效
当前断点设置如下:
从配置中可以看出,当前断点匹配的是:https请求且接口域名是httpbin开头的,接口路径是et结尾,参数包含age=18的请求和响应
由于age改成了19,所以响应不符合Query字段的规则,就没有被断点,直接返回给浏览器了
我们可以验证下,比如在请求的时候不修改age字段,修改name字段
匹配请求并修改数据
除了设置断点来修改请求数据和响应数据,我们可以通过对接口的匹配来进行数据修改
路径:导航栏的Tools --> Rewrite
在Rewrite Settings添加/修改/删除规则
重定向
charles支持重定向,重定向功能分Map Remote和Map Local共2种,Map Remote是将匹配的网络请求重定向到另一个网址请求,Map Local 是将匹配的网络请求重定向到本地文件。
Map Remote
测试使用Map Remote一般是将生产环境重定向到测试环境或测试环境重定向到生产环境,用来定位问题等。我们以百度搜索和必应搜索为例,将百度搜索重定向到必应搜索
Map Local
有时候接口做了超时处理,使用断点修改会触发页面的超时处理逻辑,这个时候我们可以将请求重定向到本地文件。
将httpbin.org/get请求重定向到本地的D:\work\data.json文件(由于响应数据是Json格式,所以我们也重定向到json文件,即要保持与响应数据格式一致,避免因为格式问题导致的操作错误)
data.txt内容如下:
移动端抓包
移动端一般是指Android和IPhone这2大操作系统的手机,想要抓取移动端的请求,需要Charles进行https配置,移动端需要网络与Charles在同一局域网(比如连接同一个wifi),且网络需要配置代理,然后安装Charles证书。
Android
移动端的请求一般是https,所以Charles需要配置https代理在本章前面有讲,这里说下Android端的配置:
-
步骤1:移动设备与Charles所在设备连接在同一个网;
-
步骤2:移动端网络设置代理,让请求通过Charles代理;
-
获取Charles所在设备的IP和Charles监听的端口
-
移动端网络手动设置代理
-
-
步骤3:移动端安装证书
- 从charles中的弹窗可以看出,我们需要访问
chls.pro/ssl
下载证书,然后安装 - 有些手机对证书下载做了限制导致手机下载证书失败,我们可以用charles所在设备打开
chls.pro/ssl
下载证书,然后传到移动端进行安装
- 从charles中的弹窗可以看出,我们需要访问
IPhone
没有设备,以后补充图