如何在 Firefox 55 的 Web 扩展中获取原始响应 body?
How get raw response body inside a Web Extension for Firefox 55?
我尝试使用 Firefox 55.0.3 在 Web 扩展中获取 原始响应 body。
暂时只看到"solutions":
- 重复请求(我绝对不想重复请求)
- 使用Javascript获取HTML标签的
innerHTML
属性,例如head
和body
(如果我错了告诉我,但是像这样的解决方案我不会总是拥有全部内容,例如,如果没有 HTML 的响应,我将一无所获。因此它永远不会是真正的原始响应,在某些情况下它根本无法工作。)
此外,我使用调试器看到 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
添加一个侦听器,它接收并允许您修改响应。
中查看示例
我尝试使用 Firefox 55.0.3 在 Web 扩展中获取 原始响应 body。
暂时只看到"solutions":
- 重复请求(我绝对不想重复请求)
- 使用Javascript获取HTML标签的
innerHTML
属性,例如head
和body
(如果我错了告诉我,但是像这样的解决方案我不会总是拥有全部内容,例如,如果没有 HTML 的响应,我将一无所获。因此它永远不会是真正的原始响应,在某些情况下它根本无法工作。)
此外,我使用调试器看到 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
添加一个侦听器,它接收并允许您修改响应。