0%

Charles使用技巧

在这里,我介绍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输入框过滤

高亮匹配逻辑是,从上到下,优先级从高到底,并且匹配成功后,就不会再匹配,仅取第一次的颜色。

image-20201108211957841

还有其它的一些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数据,把数据状态不正常的请求搜索出来。。

切换布局

StructureSequence是两种展示请求记录的布局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

参考

https://juejin.im/post/6844903665304600589

https://tools.ietf.org/html/rfc7231

请我喝杯咖啡~

欢迎加我微信交流~