使用 Charles 修改响应信息

2,394 阅读3分钟

这是我参与更文挑战的第1天,活动详情查看: 更文挑战

一、开启网络代理

勾选 proxy -> macOS Proxy 开启代理

image.png

开启网络代理后,Charles 会自动配置系统的网络代理。下图中的 网络代理(HTTP)网络代理 HTTPS 就是配置后的结果。

image.png

Charles 的代理端口可以通过点击 Proxy -> Proxy Settings 查看

image.png

代理抓包失败的常见原因

  1. 未关闭本地其它的代理工具

  2. 如使用浏览器代理插件的(如 SwitchyOmega ),需要禁用插件或者把代理端口设置到系统代理

  3. localhost127.0.0.1 Charles 默认是不抓包的,我们可以通过更改 Host 来抓包,比如新增记录: 127.0.0.1 localhost.charlesproxy.com

二、查看请求和响应

成功开启网络代理后,我们就可以在 Charles 中查看当前计算机中的网络请求了。例如我们现在打开掘金首页,我们可以在 Charles 中看到下图中的请求:

由于掘金使用了 Https 协议,我们看到的请求都是加密的文本。为了能够看到更直观的信息,我们需要安装 Charles 的 SSL 证书。具体步骤在文末的附录中单独介绍。 

装好证书后,我们需要在 Charles 配置 SSL 代理 , 通过 Proxy -> SSL Proxy Settings 打开下图的配置面板:

image.png

勾选 Enable SSL Proxying , 点击 Add , 随后添加配置image.png

完成配置后,我们再次访问掘金首页就可以在 Charles 中看到非加密的响应信息image.png

三、修改响应信息

Charles 提供了 MapLocal 的功能,我们可以用它把本地的文本当作真实的响应返回给特定的请求。具体操作如下:

1、右键某个请求,选择 Save Response 保存到本地image.png

2、右键请求,选择 MapLocal 打开弹窗

image.png

3、点击 Choose 选择本地的 Response 文件(已修改)。image.png

配置完成后,再次访问掘金首页,我们看到响应已经被替换,但是显示的是带有一些乱码的纯文本信息。image.png经过分析,我们会发现 Response 请求头中的 Content-typetext/plainimage.png

为了正常显示页面,我们需要将 Response 请求头中的 Content-type 修改为 text/html;charset=utf-8

这时候,Charles 提供的 Rewrite 就派上了用场, 首先我们要通过 Tools -> Rewirte 打开配置窗口image.png

然后勾选 Enable Rewrite , 点击 Add 添加新的规则image.png添加路径规则如下image.png

添加修改规则如下image.png

配置完毕后,我们再次访问页面就可以看到修改后的页面啦

image.png

附录

Mac 安装 Charles SSL 证书

1、通过 Help -> SSL Proxying -> Install Charles Root Certificate 下载证书image.png

2、将证书添加到钥匙串中,并信任该证书image.png

添加证书后,可以在 钥匙串访问 中搜索并查看 Charles 证书image.png

双击上图证书查看详情,展开信任选项,并信任该证书image.png

参考资料

  1. charles之localhost、127.0.0.1抓不到包的问题

  2. 【答疑解惑】为什么你的 Charles 会抓包失败?

  3. 使用Charles进行HTTPS抓包

  4. charles 证书安装