如何在 Firefox 55 的 Web 扩展中获取原始响应 body?

How get raw response body inside a Web Extension for Firefox 55?

我尝试使用 Firefox 55.0.3 在 Web 扩展中获取 原始响应 body

暂时只看到"solutions":

此外,我使用调试器看到 this answer for Chrome(从 2015 年开始),但我无法使用 Firefox 做到这一点。这种解决方案很有趣,我阅读了关于 devtools 的 Mozilla 文档,但我没有找到在 Web 扩展中使用 Javascript 的 webtools 界面的网络选项卡的方法。

为了给你更多的细节,我的目标是拦截来自服务器的完整请求和响应(header 和 body)。这不是问题,除了响应 body.

这里是获取请求的代码示例body:(后台脚本)

browser.webRequest.onBeforeRequest.addListener(
    function (e) {
        console.log(e);
    },
    {urls: ["http://*/*", "https://*/*"]},
    ["requestBody"]
)

这里是我使用的一些文档(还有更多,但这些链接都是官方的):

Here Web 扩展的一些示例。

欢迎任何想法、解决方案甚至解释"why this is not possible",提前感谢您的宝贵时间!

干杯++

为什么这不可能?

出于简单的原因,WebRequest 是从 Chrome 扩展中移植过来的,而这显然是不可能的。

请求此类功能(to edit, or just to read) has been around for a very long time (since 2011 and 2015 respectively); they are challenging from both the security perspective and technical perspective, however a principal agreement that read access is a good idea 有。

但是,它还没有实现。 Rob W 一直在朝这个方向做一些工作,但还没有完成。

也许 Firefox 有不同的实现方式?

粗略浏览一下 Mozilla bugtracker,没有发现提供此功能的任何错误。因此,实施不太可能很快出现分歧。

有什么解决方法吗?

好吧,只有调试器级别的访问才能触及实际的响应数据。

由于 debugger 未在 WebExtension 平台中实现,因此只有 devtools.network-using 扩展才能访问它 - 并且只有在 Dev Tools 为发出所述请求的选项卡打开时,这是devtools.* API 的主要限制。

Firefox 57 将提供 API browser.webRequest.filterResponseData。这似乎还没有记录,但您可以查看 bug 1255894 了解详细信息。

从 Firefox 57 开始,现在可用: browser.webRequest.filterResponseData 允许您通过 browser.webRequest.onBeforeRequest 添加一个侦听器,它接收并允许您修改响应。

您可以在 the Mozilla github webextensions-examples repo

中查看示例