在这里,我介绍Charles在文档并没有写到的使用技巧。
可以阅读官方文档,或者这篇文章
高亮
高亮可以让使用颜色区分请求记录。可以请求方法、请求头、响应头和响应code进行值的配置来设置颜色。
虽然说,在会话的Sequence面板,第一个列已经有了对应的类型,但是个人感觉那个并不够醒目。
我大部分使用响应的Header来区分(因为request的header变化很多),所以我的配置是这样的
- 红色是HTTP 响应code 不等于200
- 灰色的是HTML数据,text/html;
- 绿色是响应的JSON是数据,application/json
- 蓝色的是JS,application/javascript
- 橙色的是CSS,text/css
- 还可以对tag设置,标记breakpoint、localmap、remotemap、block等请求的颜色
- 对域名的过滤,建议使用focus,或者直接从Filter输入框过滤
高亮匹配逻辑是,从上到下,优先级从高到底,并且匹配成功后,就不会再匹配,仅取第一次的颜色。
还有其它的一些plan或者multipart data的响应我就没有配置,因为频率不高
遇到的问题
上面仅仅是标记HTTP请求的状态,如果是HTTP传输成功,但是是服务器内部错误。
这个时候请求是属于JSON的响应头,这时通过Ctrl+F或者command+F搜索错误提示的文字了。
可是,如果是在一个复杂的系统。当我们请求一个接口,而它需要依赖其它接口的成功状态的时候。
举例子,A接口是登录授权接口,并且登录成功后,会返回新的token,跟新身份。
B接口是一个依赖登录的接口,如果没有登录,就会返回未授权,不给数据。
如果仅仅只有2个接口,先调用A,再调用B,那么我们从抓包看2个新增的请求,就可以看到了。
现实情况是A和B之间,可能存在N(N>3)个请求。也就是说,B请求返回未授权,B前面有很多个请求,并且仅有1个请求是授权接口,它返回了失败的状态码。我们需要在N个请求中找到A接口。这是一个痛苦的事情,如果一个个的点请求,太繁琐了。
这个时候,要先理解接口返回的数据状态是否成功。这个不是HTTP的传输是否成功,是和后端协商的接口逻辑,表达这个数据是否正常。
所以只能使用正则匹配返回的JSON数据,把数据状态不正常的请求搜索出来。。
切换布局
Structure和Sequence是两种展示请求记录的布局UI
Structure是根据请求的URL进行分类布局,而Sequence可以说是展示了每个请求的大致属性。
除了从会话的分类标签切换布局,还可以右键单击每个请求,Show in Structure 或者Show in Sequence
来切换。
如果你在Structure页面,想要查看当前这个会话这个请求的前后请求,就右键Show in Sequence
如果你在Sequence页面,想要查看当前这个会话同样的URL请求,就右键Show in Structure
新建多个会话
Charles,可以新建多个记录会话。
Ctrl+N就可以创建新会话,注意多个会话时,如果会话有号,当前的抓包记录都会摆记录在有号的会话中。
Charles仅允许同时一个会话在记录。
每当新建会话的时候,就会暂停上一个会话的记录行为。
会话的请求记录,可以从A会话移动到B会话。
仅仅左键单击拖动请求记录到另外一个会话Tab上,再释放左键就好了
多个会话有什么意义?
按照会话保留请求记录,防止请求记录丢失。有时候,请求需要被多次参考,定位bug。
比如,我开了dev环境抓取了数据,然后我又去到test环境或者线上环境,这样他们的数据都被放在不同的会话中。可以diff差异,定位问题。
对比功能
有时候,我们某个接口调试不通,而某个接口又可以。
这个是时候,需要排除客户端的请求参数,或者服务器返回的响应参数来做diff定位问题。
可惜,Charles的原生对比请求功能启用限制很大,不知道是不是bug。。看error日志,报exception。
仅仅能对同URL的POST请求,并且第一个请求对比不了。
需要Ctrl+左边选中2个请求记录,然后右键compare。
如果真的为了对比,建议拷贝出来找些第三方工具对比
导出功能
Charles导出功能,一般我们能想要的就是导出来,需要用到的时候再导回去。
可是导出来,不仅仅是为了又导入。。
我们可以导出为XML Session File,这个文件记录了Charles的所有请求数据。我们使用脚本或命令行搜索我们需要的内容,有时候Charles没有提供的功能,也可以自己脚本处理了
保存配置
对于Charles来说,有一点需要强调的就是所有的配置都可以导出来,并且再导入回去。
这样我们在新的电脑或者环境,就可以恢复配置。。
而且,我们也可以考虑使用多个配置文件来切换。。
其它相关拓展
- 熟练抓包工具后,就可以查阅HTTP 1.1/2.0 的RFC,了解更多的请求头意义及用法
- TCP流量分析,Wireshark抓包TCP的工具,以及TCPdump
- Charles的类似可编程工具,mintmproxy及文档
- MITM attacks工具bettercap,ettercap