我正在尝试拦截 Web 浏览器发送的请求的 HTTP 响应,以便在浏览器收到响应之前对其进行编辑。更具体地说,我想通过将 JS 文件替换为本地文件来修改它。Chromium 浏览器具有本地覆盖,但这些覆盖仅在 DevTools 打开时才有效,并且在尝试编辑非常大的 JS 文件时似乎还存在内存泄漏问题(这种情况发生在 Chrome、Brave、Edge 甚至 Canary 中)。
我希望能够输入 URL 或 URL 模式。当请求的 URL 与模式匹配时,我希望能够通过将响应替换为本地文件来拦截响应。
请注意,这与简单地监控传入/传出流量不同。我不想监控。我想拦截流量,以便在发送/接收之前对其进行编辑。客户端应用程序可以不知道拦截情况。
我正在使用 Windows 7。我也是 C# 开发人员,因此如果有一种方法可以通过 .NET 捕获数据,我就可以编写自己的。
答案1
现在,Web 请求几乎完全使用 HTTPS 协议完成,因此您需要一个 SSL 代理来拦截 Web 请求。
其中一个中间人 SSL 代理是 Charles Web HTTP 代理:
Charles 可以用作中间人 HTTPS 代理,使您能够以纯文本形式查看 Web 浏览器和 SSL Web 服务器之间的通信。
Charles 通过充当中间人来实现这一点。您的浏览器不会看到服务器的证书,而是 Charles 动态生成服务器证书并使用其自己的根证书(Charles CA 证书)对其进行签名。Charles 接收服务器的证书,而您的浏览器接收 Charles 的证书。因此,您将看到一条安全警告,表明根证书颁发机构不受信任。如果您将 Charles CA 证书添加到您的受信任证书中,您将不再看到任何警告 - 请参阅下文了解如何执行此操作。
Charles 仍通过 SSL 与 Web 服务器通信。从 Web 浏览器到 Charles 的通信是 SSL(加密的),从 Charles 到 Web 服务器的通信也是 SSL(加密的)。
答案2
中间人 SSL 代理只是解决此问题的一种方式。可能有浏览器插件可以做到这一点。例如,Firefox 插件 Tamper Data 能够拦截请求,但不确定它是否也能篡改响应。遗憾的是,这个插件是 Mozilla 在“Quantum Break”(Firefox 57 又名 Quantum,它放弃了对所有插件的支持,但 WebExtensions 除外)中留下的众多插件之一。新的 Tamper Data 插件无法再做到这一点。我不确定在现代浏览器中的当前 WebExtension API 中是否可以做到这一点,如果可以,是否是故意不这样做,或者是否值得请求 API 功能,这至少对 Firefox 来说是可能的(我不知道是否可以为基于 Chrome 的浏览器请求新的 WebExtension API)。