以下测试教程以
mac系统的4.5.6版本为例
一、下载及安装
安装包下载地址:https://www.charlesproxy.com/download/
注册:
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
二、基础部分
1. 代理配置 - 监听端口
菜单:Proxy - Proxy Settings

2. 查看局域网IP地址
菜单:Help - Local IP Address

3. 手机WIFI加入Charles代理设置
以小米手机为例,在设置-WLAN-已连接的WIFI-右箭头进入设置-代理改为手动
主机名:填写局域网IP地址
端口:填写Charles监听端口


手机wifi接入后,Charles客户端会弹窗,此时Allow即可
二、抓包 - WEB浏览器
在浏览器地址栏输入地址,如:https://www.baidu.com
打开charles,就能看到该地址的请求详情

三、抓包 - 手机端(Android7+)
注:Android 7.0+默认不信任用户添加到系统的CA证书,也就是说基于SDK24及以上的APP来说,及时在手机安装了
Charles也无法抓取https请求,会出现抓取的请求均为unknown,如下图To provide a more consistent and more secure experience across the Android ecosystem, beginning with Android Nougat, compatible devices trust only the standardized system CAs maintained in AOSP.(文档链接)

1. 准备工作
需要一款root过的手机,root方法自行百度,
# 以 root 权限执行
adb root
# 解决目录 read only 关键命令行
adb disable-verity
# 重启
adb reboot
# 以 root 权限运行
adb root
# 重新挂载
adb remount
2. 准备Charles证书文件
1、获取Charles证书路径:
Help -> SSL Proxying -> Save Charles Root Certificate...
2、计算 Certificate_Hash 命令
openssl x509 -subject_hash_old -in /Users/xxx/Charles/charles-ssl-proxying-certificate.pem
此时会得到 Certificate_Hash 值,第4步会用到
注:如果openssl没有安装,安装下就行
3、备份证书文件
cp /Users/xxx/Charles/charles-ssl-proxying-certificate.pem /Users/xxx/Charles/charles-ssl-proxying-certificate.pem.bak
4、重命名证书文件
mv /Users/xxx/Charles/charles-ssl-proxying-certificate.pem <Certificate_Hash.0>
注意:添加后缀.0为了避免文件名相同冲突。
5、将证书添加到安卓系统证书目录`/system/etc/security/cacerts`
adb push <Certificate_Hash.0> /system/etc/security/cacerts

3. 启用证书
miui12.5 -> 设置 -> 密码与安全 -> 系统安全 -> 加密与凭据 -> 信任的凭据
证书默认开启,如不需要可关闭。

4. 再次尝试抓包

四、请求过滤 - Filter
默认情况下,
charles会抓取监听所有的请求(如浏览器、手机、电脑后台服务),那如何快速找到目标的请求信息呢,以下有4种方法:
1. 通过filter功能过滤

选中Structure的tab,在底部输入关键字即可过滤。
2. 通过find功能过滤

macos用户可通过Commond + F快捷键调出会话搜索框(或者通过菜单:Edit -> Find...)
Text to find: 要过滤的关键字。可以是普通的字符串、正则表达式等等
Scope: 搜索的范围。一般默认选`session`
Search In: 从什么范围内搜索,可通过勾选缩小命中范围
3. 通过Recording Settings功能过滤

入口:Proxy -> Recording Settings 或 以下快捷入口

Include: 告诉
Charles,监控请求时我们重点关注的hostExclude: 告诉
Charles,监控请求时我们需排除的的host注意:理论上,这边
Add的为请求url的域名
4. 通过Focus或Ignore聚焦或忽略指定域名
很多时候,我们仅想关注指定的域名,对其他域名发起的请求不关心,这时候可以使用
Focus功能,仅需右键将制定域名添加Focus即可,如下图:
此时,被聚焦的域名将被置顶显示,如下图:

同时,在Sequence视图下,可以通过勾选Focused,聚焦实时的网络请求

同时,我们可以通过Focused Hosts菜单查看已聚焦的域名(入口:View -> Focused Hosts...)

相反,如果被Ignore的域名,在下次请求时将不会被监控。
五、模拟弱网(限流) - Throttle
在做APP异常场景测试时,经常会涉及到弱网测试,那如何对APP进行限流呢?
入口:Proxy -> Throttle Settings

Throttle preset: 预置的限流方案可供直接选择
Bandwidth: 带宽(带宽),设定上下行的流量大小
Utilisation: 利用百分比,即为总带宽的百分比,是带宽的缩放因子,对于大多数互联网连接利用率始终为100%
Round-trip latency: 往返延迟(延时),即测量客户端与远程服务器之间的第一次往返通信的毫秒延迟。一般用于客户端向服务器和服务器向客户端的每次请求时延测试。
MTU: 最大传输单元,即TCP数据包的最大尺寸。指定MTU不改变的可用带宽,但允许Charles在MTU分配带宽大小的块,导致在每个传输包分割的现实水平
Reliability: 可靠性百分比(丢包),衡量连接完全失败的可能性,一般用于模拟不可靠的网络条件。可靠性是指定为成功发射10kib消息的可能性,值为50%意味着所有10kib传输一半会成功
Stability: 稳定性百分比(抖动),一般用于模拟不稳定的网络环境,如移动网络。
Unstable quality range: 不稳定质量范围,主要针对Stability设置的范围
大多数情况下,模拟弱网环境仅需更改Bandwidth设置,配置其上下行速度即可,具体根据业务需求为准。
设置完毕后,可通过点击小乌龟快捷开启或关闭,同时在charles工具下方可看到是否已开启限流。


六、断点 - Breakpoints
使用场景:一般用于调试某个接口,更改请求的参数,查看更改后的响应
-
添加接口至
Breakpoints

-
**查看已添加的
Breakpoints**
入口: Proxy -> Breakpoint Settings...

- 编辑断点
-
Scheme参数在添加时会置空,此时需根据接口的实际情况选择GETorPOST -
Request/Response为需要断点的范围。

- 此时可以重新触发该接口,即可进入断点模式(默认情况下,如果做了编辑断点操作,断点开关即为打开状态),如下图:

- 编辑请求信息 -
Edit Request

如上图,您所看见的均可以进行更改。但我们常更改的有以下几点:
- 请求的参数,如对key进行增删、更改value的值等等
Headers中,删除cookie、UA等等Cookies中,对cookie进行增删
- 点击
Execute执行,此时Charles会以更改后的信息向服务端发送请求,服务端也会对此请求作出响应(Response)。因为配置断点时勾选了Response,即这边可对返回的报文进行二次处理

如上图,大多数情况下,我们仅会在JSON Texttab下对返回报文进行更改

此时,观察被测APP或WEB页面是否根据编辑的Request或Response展示。
另外补充一点,我们可通过以下两种方式查看当前断点是否已经启用。

若该icon为红色高亮,即代表已启用

若底部显示Breakpoints,则代表已启用
七、重定向 - Map
重定向分为以下两种:
- Map Remote: 将指定的网络请求重定向到另一个网络请求地址上
- Map Local: 将指定的网络请求重定向到本地配置文件上
使用场景:一般用于Mock测试
待补充。。。
八、重写 - Rewrite
待补充。。。
其他用法
1. 高亮请求 - highlight rules

入口:View -> Highlight Rules...(Command + Shift + H)
作用: 对重点需关注的请求以不同的高亮颜色展示(支持通过添加Conditions(如请求头、响应状态码等)过滤)
本文详细介绍Charles代理工具的安装与使用方法,包括配置代理、抓包、请求过滤、模拟弱网环境等功能,并提供断点调试、重定向等高级技巧。


441

被折叠的 条评论
为什么被折叠?



