目录:
Charles 是一款 HTTP/HTTPS 代理服务器和网络抓包工具。只能抓取 HTTP/HTTPS 协议的数据包,其它协议如 FTP、SMTP 的数据包无法抓取。
原理图运行如下:

原先浏览器是直接访问服务器的,现在中间多了一层 Charles,接下来研究两个问题:
下载 Charles 并安装。
Registered Name: aHR0cHM6Ly96aGlsZS5pbw==
License Key: NDg4OTFjZjIwOWM2ZDMyYmY0
启动 Charles 软件,会做如下几件事情:
这一步相当于大楼(你的电脑)有 10 个门可以出去,Charles 守在了其中一个门牌号为 8888 的门口;
这一步相当于大楼(你的电脑)有 10 个门可以出去,但是只有门牌号为 8888 的大门打开,其它大门全上锁了;
在 MacOS 系统可以很直观的看到这一点: MACOS -> 设置 -> Wi-Fi -> 详细信息 -> 代理

这一步相当于大楼内有人(HTTPS请求)要出去,发现其它大门全上锁了,只能从门牌号为 8888 的大门出去,正好被 Charles 逮个正着,经过 Charles 同意后才能放出去;
同样外面的人(HTTPS响应)只能从门牌号为 8888 的大门经过检查才能进入大楼。
当你启动 Charles,你会发现这个列表会不停地刷新 HTTPS 请求。
并不是只有浏览器才能发送 HTTPS 请求,很多桌面应用比如网易云音乐、搜狗输入法等等都会发送 HTTPS 请求。
因此对请求进行过滤首当其冲,我用了很多次 Charles 才找到它的过滤在哪里。
在窗口正中间有一个颜色很浅的文字 “Filter”,点击输入关键词 “dkvirus” 回车即可过滤找到上一步访问的 dkvirus blog 请求。

找到 dkvirus blog 请求后,点击下方第二个选项 Contents 查看数据包内容会发现全是乱码。

原因是 HTTPS 使用了 SSL 加密,需要添加证书后才能看到明文。
解决方法如下:
Proxy -> SSL Proxying Settings -> SSL Proxying -> Enable SSL Proxying
Help -> SSL Proxying -> Install Charles Root Certificate -> 钥匙串里搜 Charles -> 双击在信任里选择始终信任
这两步操作完重新请求下 dkvirus blog 可以看到数据包都是明文了。
正常情况下,我们访问 https://www.baidu.com 可以看到如下界面:

在 Charles 里面找到这个请求,鼠标右键点击,选择 Breakpoints,相当于打了个断点,之后所有 https://www.baidu.com 请求都会进入该断点:

回到浏览器再次请求 https://www.baidu.com,会自动跳到 Charles 断点处,如下图,按照数字顺序依次操作。(这里为什么这么改,下一步介绍)

再次回到浏览器,看到浏览器地址栏是 https://www.baidu.com,但是网页内容并不是百度首页。
我们在上一步拦截并修改了请求的路径和参数,实际请求的是 https://www.baidu.com/s?wd=blog.dkvirus.com

回到浏览器,请求 https://www.baidu.com,这一次在 Charles 断点里,我们不修改请求报文,直接点击 Execute 放行请求。

上一步点完 Execute 后会再一次进入断点,如下图可以看到拦截了响应报文,按数字顺序进行操作,最后点击 Execute 放行响应。
(如果修改了请求报文,是不会再拦截响应的)

回到浏览器,看到浏览器地址栏是 https://www.baidu.com,但网页内容不是百度首页,变成了我们自己修改的响应内容。

↶ 返回首页 ↶