使用Charles抓包

Charles是运行在 MacOS 下的反向代理工具,是前端调试、http抓包居家必备神器。此软件支持Mac和Windows两种操作系统,本文以Mac版来讲解。

写在前面的说明

  • 此文档使用的 Charles 版本号为 4.1.3,也适用于4.1.4版本。
  • Charles 为共享软件,有30天的使用期,购买须用美元$$$$$支付。

这里是官方下载地址

快速体验

将主机(运行Charles的计算机)作为HTTP代理服务器,再将需测试的设备设置代理到当前主机,Charles会拦截相应的请求,你可以在Charles观察和修改这个请求的一些内容,或将指定的请求匹配到任意你指定的资源上。

第一步,配置设备的代理服务器

保证测试设备与代理主机处于同一局域网下,且相关网关、主机的防火墙配置妥当,然后记录代理主机的局域网IP地址,端口默认为8888,可在Charles里将代理端口替换成任意你需要的。

测试设备的配置,填入相应的代理ip和port:

Windows PC: 在Internet选项中配置,具体略。
Andriod Devices: 在设置→Wifi→当前局域网→代理→手动配置中设置,具体略。
iPhone: 在设置→无线局域网中配置代理,见下图。

003

MacOS: 在System Preferences → Network中配置,见下图。

001

第二步,开启Charles

打开Charles,开启代理设置:

005

如果你配置完成,在测试设备试图发送请求时,应该能看到Charles弹出了一个对话框:

002

点击【Allow】,之后你就可以看到所有该设备发送和接收的http请求了。

004

实验一:映射请求:

在开发和测试中,你往往需要使用测试的数据或资源来替代现有的相应资源。这种需求,你可以在Charles的Tools→Map Remotes中进行配置,如图:

006

007

Charles也支持URL的模糊匹配,使用通配符(*)拦截你需要的请求。

如此做,你就将指定的请求映射到你需要的请求中去了。将资源映射到本地文件,操作类似,不再详谈。

实验二:开启HTTPS抓包

我们知道,HTTPS即是在HTTP的基础上增加了一个加密层(SSL/TLS)由于请求是被加密的,我们查看HTTPS请求时,往往会出现这样的情况:

008

Charles提供了解决办法,即由Charles提供相应的加解密证书,这样,Charles就可以加解密相应的数据了。你需要进行以下几步操作:

1.在设备中安装相应Charles提供的证书,手机(iOS和Andriod)下的安装方法是:

在Sarari/Andriod Browser中输入https://chls.pro/ssl,手机会自动下载并安装证书:

009

注意1:如果出现无法安装的情况,请务必检查:(1)设置好手机HTTP代理 (2)电脑上Charles要开着。

注意2:iOS 系统下,需要在 设置→通用→关于本机→证书信任设置 里面启用完全信任Charles证书。

注意3:有些安卓手机如果无法直接安装证书,可以选择“Help → SSL Proxying → Save Charles Root Certification”保存证书到硬盘,再复制到SD卡中安装。

2.在Charles中设置SSL Proxy,如下:

010

在弹窗中新增需要监测的host和port:

011

当上述两部配置好后,再次查看相应的请求,就可以看到完成的效果:

012
013

实验三:修改请求/响应的内容

很多情况下,我们还需要对请求和响应的内容进行一些修改来满足我们的开发测试需求。Charles可以很方便做到这一点:

1.执行菜单Proxy → Enable BreakPoints,或者像下图一样直接在请求中右键:

014

2.再次发送这个请求,在Request发送前以及Respones到达时,Charles会先行进行拦截,然后在弹出的窗口中进行编辑即可:

015

016

实验四:模拟不同网络环境

我们在开发测试中,往往还需要对不同的网络环境进行相应测试,比如模拟网络很慢的环境,也可以利用Charles来模拟:

1.执行Proxy → Throttling Settings,弹出如下对话框,勾选“Enable Throttling”:

017

2.根据不同需求来配置其中的参数。

以下是常见移动网络环境的参考速率:

制式 上行(kbps) 下行(kbps)
GSM 118 236
CDMA 153 153
CDMA2000 1800 3100
TD-SCDMA 2200 2800
WCDMA 5760 14400
TD-LTE 50000 100000
FDD-LTE 40000 150000

---- end ----

注意事项:

1.不同版本的Charles对应的证书是不通用的,如果测试机已经安装了Charles证书但Charles无法解析https请求,考虑是证书版本问题,可以按照上述顺序重新安装,不同版本Charles的证书不冲突。

2.一些浏览器在这种情况下会提示安全风险并拒绝发送请求,因此当你的请求报错时,请检查安全设置,尤其是让系统信任该证书。

3.关闭Charles时,测试设备的代理配置也要相应清除,否则设备就连不上网啦~

4.如果你的电脑使用了科学上网之类的东东,Charles可能无法正常工作,想要两者和平共处,需要对Charles进行额外的设置,具体方法因科学上网嘚瑟方式不同而异,这里就不再展开啦!