Charles入门到精通
一、Charles介绍
Charles是一款很强大的抓包神器,可以抓取请求信息包括request, response和HTTP headers (包含cookies与caching信息)
该软件是用Java写的,能够在Windows,Mac,Linux上使用,安装Charles的时候要先装好Java环境
工作原理
二、Charles下载
先安装配置好Java环境(mac系统一般自带java环境)
官网下载安装Charles:https://www.charlesproxy.com/download/
Charles是收费软件,可免费试用 30 天;试用期之后未付费的用户可以继续使用,但每次使用时间不能超过 30 分钟,且启动时将会有 10 秒种的延时,所以如果需要长期使用的话建议付费哈哈
三、Charles配置代理和证书
代理连接
前提是Charles电脑和手机网络在同一个局域网,且关闭电脑防火墙、其他代理或者翻墙软件
Charles代理设置:
Proxy->Proxy Settings,设置端口号,默认的是8888,也可自定义;
勾选Enable transparent HTTP proxying
手机设置代理:手机和电脑连同一个网络
- 首先查看电脑ip:在charles中查看 :Help -> Local IP Address
- 在手机wifi 上设置代理 :wifi-代理-手动-输入主机名(服务器ip)/端口号
手机代理配置保存后,Charles会弹出询问“allow”或者“deny”,点“allow”按钮允许;之后charles就会抓到手机的HTTP请求了
点击允许后,在Proxy -> Access Control Settings里可看到可以访问此代理服务器列表
注意
如果不小心点击了拒绝,可以手动添加手机IP/Mac地址到允许访问列表,或者重启Charles,手机再次访问,会再次提示选择。
如果不想每换一个手机都要进行验证,可以配置允许所有手机访问:即加入 0.0.0.0/0(IPv4)或::/0(IPv6)
证书安装
- Charles证书
help-SSL Proxying-install Charles Root Certificate,导入证书
我这里是mac电脑,会打开钥匙串,可以找到Charles证书,如果没有设置可信任,更改为受信任的证书即可
补充一点:如果证书过期了,需要先在钥匙串这里删除过期的证书,再重新导入证书并且手动设置为可信任:
window电脑:点击安装证书,证书存储在“受信任的根证书颁发机构”
- 手机安装证书 主要用于抓https请求
Help -> SSL proxying -> Install charles root certificate on a Mobile Device or remote browser…
出现弹窗得到地址 chls.pro/ssl
在手机自带的系统浏览器输入地址 chls.pro/ssl ,下载安装证书
注意:
-
ios手机:设置→通用→关于本机→证书信任设置里面启用完全信任Charles证书
-
有些安卓手机安装失败处理方法:
使用第三方浏览器下载安装,亲测UC浏览器可用 把下载的证书格式".pem"改为".crt" 将该文件放到download文件夹下 手机设置-更多设置-系统安装-从存储设备安装-选择文件-选定该文件安装 有些新版手机:设置-更多安全-加密与凭据-安装证书
四、抓包设置
Charles设置Proxy代理
Proxy -> SSL Proxying Settings… 勾选Enable SSL Proxying;设置抓包过滤条件
include 设置用于启用/停止可以捕捉/显示的请求
exclude 设置不抓取的请求,在会话列表中右键选择 ignore 时,对应的url会出现在这里
点击Add,Host设置要抓取的https接口:过滤条件支持通配符,*表示任意多个字符,?表示一个字符;如Protocol中有http,https,选择空白或者输入通配符都可以表示任意协议的请求【例如我要抓的请求域名都是:xx.qutoutao.com, 那我的host可以配置为:*qutoutiao】
端口443
去掉系统抓包
指的是Charles当前电脑的pc端请求的抓包,一般来说我们用Charles抓包主要是用于抓app请求,所以建议把系统抓包勾选去掉 :proxy-macOS proxy (windows proxy),以免所有的都在代理,产生很多干扰
综上操作,就完成了Charles抓取HTTP(S)数据包的所有配置了;此时操作app-查看Charles,就可以看到数据包的内容了。
五、异常情况排查处理
- 如果手机代理设置好Charles没反应也没弹出allow咨询
- 手机连接代理后无法上网
解决:检查手机wifi跟电脑是否在同一个局域网 - http可以正常抓到,而https是unknown
解决:检查手机是否成功安装Charles证书并且信任证书 - 如果返回的是乱码,首先看是http请求还是https
如果是http,可能只是是返回来的中文乱码,解决方案是找到该软件显示包内容(Contents目录下的info.plist),打开文件找到vmoption,添加-Dfile.encoding=UTF-8即可。
如果是https请求出现的乱码(如下图):
解决:可能是Charles的CA证书问题,检查证书是否受信任或重新导入并信任
六、Charles常用功能和使用
Charles常用功能
Charles功能很强大,这里仅根据我个人经验介绍工作中用到的常用功能
1、截取 Http 和 Https 查看请求和返回
2、过滤网络请求
3、重定向–Map Remote;Map Local…
4、修改请求参数或返回内容–Rewrite
5、断点:支持网络请求的截获并动态修改-- Breakpoint。
6、支持模拟慢速网络—Throttle Setting
7、黑名单:模拟请求失败–black list
8、单接口压测–Advanced Repeat
Charles的两种视图模式
Structure:树状结构显示,将网络请求按访问域名分类
Sequence:水平结构显示,网络请求按访问的时间排序
如果不习惯Sequence默认的上下视图,可以修改为类似Fiddler的左右视图模式(更符合眼睛的习惯):Charles Preferences->Viewers选择Sequence view layout为Tall即可;
过滤网络请求
方法一:在主界面的中部的 Filter 栏中填入需要过滤出来的关键字。例如我们要看的地址是:https://www.baidu.com/, 在 Filter 栏中填入关键字“baidu”即可,不支持通配符
方法二:在想过滤的网络请求上右击,选择 “Focus”
选择Focus,其他的请求就会被放到一个叫Other Host的文件夹里面,这样也达到了过滤目的。
方法三:Proxy -> SSL Proxying Settings… 勾选Enable SSL Proxying;也就是上面写的Charles代理域名设置,这里就不赘述了;
方法三适合属于长久性的设置,比如我习惯把我所负责的业务模块我经常需要抓包的所有接口的域名设置在这里,方便我日常抓包准确又不冗余
而方法一和二更适合临时过滤排查
重定向–Map Remote/ Map Local…
开发或测试时,有这样的场景:
1.服务端线上版本有bug,你在本地修改程序后,需要模拟实际的线上环境,来验证程序的正确性,最笨的方法就是让客户端修改一下APP的调用地址到你本机,然后重新打一个版本供你模拟测试,这样虽然可以,但每次遇到bug都要这么做的话,那效率极其低下;然而Charles为我们解决了这个问题
2. 有时候开发调试时需要用本地的文件代替服务器文件
而Charles的代理转发功能就很方便的可以解决这些问题
- 代理转发:右键 -> Map Remote
或:tools -> Map Remote
主要用于远程重定向,我日常用的最多的场景:比如测试包某个接口需要请求线上接口,就直接将这个接口转发到线上接口域名
请求转发,把实际调用地址转发到你想调用的地址进行执行
- mock: 右键> Map local…
准备一份要返回给客户端的 response 数据文件,可以从前面介绍的save Response来保存正常数据,然后修改,也可以自己构造一份(用于服务端api尚未发布,但移动端又需要进行调试的时候)
完成设定后,后续符合条件的请求都会用本地映射文件替代
修改请求参数或返回内容–Rewrite
Rewrite 功能适合对网络请求进行一些正则替换,针对某个值修改。点击tools—Rewrite,勾选Enable Rewrite,点击添加,然后设置要修改的内容
断点–Breakpoint
先发起一次请求,对该请求设置断点:点击右键,选择Breakpoint
设置断点后的每次请求都将被拦截住,此时查看拦住的Breakpoints,点击Edit Request,里面分别有URL、Header、cookies等,可以进行修改,然后点击右下角的Execute按钮,如果不修改请求的话,直接点击Execute按钮,点击Execute按钮后,此次请求才发送出去;点击Abort,中断请求。
支持模拟慢速网络—Throttle Setting
Proxy–Throttle Setting,勾选 “Enable Throttling”,添加Location,可以设置 Throttle Preset 的类型[网络]
黑名单-Black list
右键/tool --> Block list
有时候我们需要模拟在一个场景中,某个接口请求失败的情况,就可以把这个接口加在Black list中
服务器压测–Repeat Advanced
选择要测试的请求,右键选择Repeat Advanced,填写并发线程数和请求次数
七、一些补充知识点
- 抓包接口测试需要了解下相关HTTP状态码所对应说明
- 配置的导出–导入
比如日常要用到的map remote、map Local、black list等已经配置好了常用的请求信息,突然要换电脑或重装Charles时,可以把配置导出,在新的Charles中相应配置中导入即可直接用
- 导出:全选(command+点击每一行选中)–>Export下载所有配置项到一个文件本地:XX.xml;
- 导入:安装新Charles后可直接import导入