Charles是一款 http 代理工具,同类的软件有 wireshark,fiddler,burp suite。各有侧重点不同,但核心的代理功能设置基本类似。该软件是用 Java 写的,能够在 Windows,Mac,Linux 上使用。因其界面简洁、功能齐全在作者一直习惯用这款工具,下面就使用的各方面做个简单的介绍。
下载官方的安装包Charles download,这个是官方最新收费版本,不花钱也能用只是有部分限制。
安装后我们需要对 PC 做个简单的配置
如下:
1.代理端口设置:(这个是可以根据需要设置默认 8888)
2.允许抓包的 ssl 域名设置:(下图是全匹配配置,看需要可以改成指定)
3.允许代理的设备 ip 设置:(这里默认是空的,当有远端设备代理接入时会弹窗是否允许,如图设置会允许所有设备不用再手动允许)
4.charles 本身设置完了,我们还需要确认防火墙是否允许该端口的出入数据,这里可以配置指定端口的出入站规则,也可以指定软件的出入站,如下图:
对于 PC 端的抓包 charles 默认会抓的 IE 的数据,可以把 Proxy > Windows Proxy 的勾去掉。
这里推荐使用firefox浏览器来抓包,因为它自带的证书管理,可以免去很烦人的证书信任。
但这里还是要做个简单的证书配置:
1.导出证书
2.导入火狐证书管理器
3.设置浏览器代理为
我这里使用的火狐的插件 FoxyProxy Basic ,如果没有设置 IE 的代理为 127.0.0.1:8888 也可以,这样是设置后浏览器的数据就是走的 charles 代理,如果本地没有指定 host 配置,这时的所请求到的版本和 PC 网络一致。关于要对应特定代理验收的版本,请看后面的介绍。
对于 APP 的抓包,IOS 和 Android 的配置略有不同:
通用的要求是:PC 和移动设备必须要能够 ping 通
IOS
1.设置代理到起了 Charles 的主机。(点击 wifi 名后面的 !进入设置页面如下)
2.Safari 访问:http://chls.pro/ssl 允许并安装证书
3.进入设置 > 通用 > 关于本机 > 证书信任设置(拉到最底下)
此时设备的请求应该都已到 charles 中可以看到了。
Android
这里要注意下,安卓 6.0-7.0 的版本及部分 8.0 版本的手机,https 的证书信任需修改 APP 源码,这里不做介绍。
1.设置代理到起了 Charles 的主机。(以三星为例:长按 wifi 名,进入高级设置,代理模式改为手动)
2.自带浏览器访问:http://chls.pro/ssl 设置任意名称,(这里会要求设置解锁密码)
3.如果部分手机,无法通过上面的访问自动安装证书。可以通过设置里 “从设备安装证书”,具体位置视厂商不同,一般在安全隐私相关设置中。
下面介绍的是一些开发测试过程中常用的招式
应用场景:1.开发联调 2.内网测试
如 APP 打包的是请求到 192.168.3.4:80,但我需要请求到指定 19.168.66.66:6005 的机器上。
在 Tools > Map Remote Settings 中 Add 一个跳转并勾选启用,就可以了。(这里也可以直接右键已经发出的请求,点击 Map Remote...设置)
这里有个小技巧,就是我们在测试部分内网环境的触屏页面时,即使装了 https 证书,还是无法获取正常的数据。这是由于内网环境 https 证书配置异常导致的,我们可以把这个 https 的请求转成 http。如果该域名设置了强制使用 https 可以看到我们的请求会无限重定向,此时关闭 https 转 http 的设置就可以正常请求到数据了
应用场景:1.异常数据调试 2.安全测试 3.请求头修改模拟 IP
我们在接口调试时,有些数据无法通过前端流程去生成,此时可以通过断点调试的方式强行加戏。如 ID 为 3456 的公司不再搜索列表,我们可以修改请求返回的数据给它加进去。
第一次我们需要正常请求一次,右键该请求添加断点,再次请求时会弹出框,2 次分别为 request 和 response,按需求修改即可。(部分客户端会有请求超时限制,手速跟不上可以把需要的返回值在文本编辑器中编辑好,复制进来即可)
应用场景:1.灰度验收 2.组合抓包
我们可以指定 charles 需要走的网络请求代理,通常在指定运营商灰度,或者内容上线版本模拟环境时可以这么去做。同时该功能可以使我们,将代理服务器代理到其它代理,达到一个请求多个代理查看的目的。
可以分别设置 http\https\socket,和浏览器的代理设置一样,我们也可以设置通配符,把不需要走代理的域名排除出去。(这个在测试内网支付时通常都需要特殊配置下。)
应用场景: 1. 弱网测试覆盖
弱网设置里,我们可以设置指定的域名被限速,也可以全局限速。
应用场景:1.扒数据
这个属于花式玩法,我们知道大部份的视频或音频网站都有防盗防下载的防范。如果需要,我们还是可以通过挂 charles 代理的方式,保存下我们需要的媒体数据。
对于移动设备 scoket 请求的抓包,charles 也可以结合 wireshark 来实现。关于这款代理工具的更多用法大家还可以根据业务需要去扩展。