使用Charles代理进行请求转发
- 2019 年 10 月 7 日
- 筆記
Charles是一款代理工具,官网中的解释为“HTTP代理/HTTP监视器/反向代理”,在Mac OS中使用比较多,当然也支持Windows的用户,我们可以通过这个代理来查看客户端与服务器之间的交互信息,也可以通过它来修改这些请求或响应当中的信息,从而来验证一些产品功能逻辑。
今天我们主要来了解一些Charles当中修改报文的方法。进入主题之前,有两点需要说明的,第一就是什么是报文。其实报文就是我们所说的消息(message),只是这些消息在网络当中传输需要按照固定的信息格式。第二点,就是修改什么。因为我们提到了多种修改的方法,在判断使用哪种方法之前,如果我们已经清楚修改什么,就有可能选择出更高效的方法。
1. Breakpoint(打断点)
比较适合用于单次的修改。通过打断点的方式,在请求(Request)到达服务端前和响应(Response)到达客户端前分别可以实现一次拦截,这样我们可以通过修改Request来“欺骗”服务端,修改Response来“欺骗”客户端。

如上图所示,这中间的信息我们都是可以进行修改的,比如把请求方式由GET改为POST,改完后点击Execute即可继续进行下一步。

如上图所示,响应中的http状态码、报文数据等也可以在拦截之后进行修改。打断点是每次都要修改的,如果你想要“一劳永逸”,就需要采用下面的方法了。
2. Rewrite
比较适合用于修改报文中的url、固定字段、字符串等,打开Charles工具栏的Tools,找到Rewrite点击进入设置。

1) 修改url:比如说请求url发生了变化,需要将www.test.com修改为www.test2.com。


2) 修改返回的http状态码:比如某条请求在返回时,客户端根据请求的状态码做了判断,当请求成功(200)时,就实现逻辑一,请求不成功了就实现逻辑二,这时我们可以通过把请求的状态码修改为200,来验证第一条逻辑,也可以把状态码改成404,来验证第二条逻辑。


如上图所示,我们一定要在设置的时候勾选上Regex,表示我们使用了正则,这样d{3}就代表3个并列的整数,也就等同于http的状态码了。
3) 修改响应中的字符:比如有些测试环境当中不支持https的链接,有些图片链接是https开头时,会显示为灰图,那么我们可以把返回的报文中https修改为http。


3. Map(重定向)
1) Map Remote
比较适合用于做单纯的域名转发,比如上文中通过Rewrite修改url,这种问题也可以用Map Remote来解决。

如上图所示,我们的一次Map Remote,实现了下面四项修改:
修改项 |
修改前 |
修改后 |
---|---|---|
Protocol |
http |
https |
Host |
www.test.com |
www.test2.com |
Path |
/a/b/c |
/a/b/c/d |
Query |
page=0 |
page=1 |
2) Map Local
如果你只需要对返回报文的Body进行修改,而且修改之后的内容固定为某一批数据就可以,那么这个功能就可以帮到你,因为我们可以把请求转发到本地文件。