为什么我要把请求从 HTTPS 改成 HTTP?这是因为生产环境是 HTTPS 的,而测试环境却是 HTTP 的,我要在测试环境测试应用,所以需要把请求从 HTTPS 改成 HTTP。为什么我不在测试环境部署一套 HTTPS 证书?这是因为 HTTPS 证书属于敏感信息。
最开始,我的想法是应用打包的时候打两个包,分别是正式包和测试包,正式包使用 HTTPS 来请求服务器,测试包使用 HTTP 来请求服务器。这个方法当然可以工作,不过实在是太蠢了!好在公司的测试兄弟告诉我可以用 Fiddler 来搞定这个问题:
Fiddler
也就是说,Fiddler 在这里就是一个「中间人」的角色,当客户端发送 HTTPS 请求 给服务器的时候,Fiddler 拦截到请求,将其解密后以 HTTP 的形式转发给服务器,然后再把服务器的响应加密成 HTTPS 返回给客户端。
了解了原理之后,我们只要一小段 FiddlerScript 代码就能完成此功能:
代码语言:javascript复制if (oSession.isHTTPS && oSession.HostnameIs("test.com")) {
oSession.oRequest.headers.UriScheme = "http";
}
添加的位置:在 FiddlerScript 标签里搜索 OnBeforeRequest 方法,加到最上面即可:
Script
BTW:记得在 Options -> HTTPS 里选中 Decrypt HTTPS traffic。
本文好像太水了,LibGen 上有一本名为「Debugging with Fiddler」的电子书,完整介绍了 Fiddler 各种高大上的用法,有兴趣的不妨下载看看。