这似乎是一个难题(或者不可能??)。我想在浏览器中的HTTP请求引起的HTTP响应,在观看Chrome扩展后台脚本的情况下获取和读取。我们可以通过这种方式获取HTTP请求正文
chrome.webRequest.onBeforeRequest.addListener(function(data){
// data contains request_body
},{'urls':[]},['requestBody']);
我还检查了这些堆栈溢出
- Chrome extensions - Other ways to read response bodies than chrome.devtools.network?
- Chrome extension to read HTTP response
有什么聪明的方法可以在Chrome扩展中获得HTTP响应主体吗?
5条答案
按热度按时间fdbelqdn1#
我找不到比这个答案更好的方法了。
Chrome extension to read HTTP response
答案告诉我们如何获取响应头并显示在另一个页面中。但是在响应对象中没有正文信息(请参阅event-responseReceived)。如果您想获取响应正文而不需要另一个页面,请尝试此操作。
我认为它对我来说已经足够有用了,你可以使用
chrome.debugger.detach(debuggeeId)
来关闭这个丑陋的提示。对不起,也许没什么用......
imzjd6km2#
现在Chrome开发者工具扩展中有一种方法,示例代码可以在这里看到:blog post.
简而言之,下面是他的示例代码的改编:
omqzjyyz3#
这绝对是Chrome扩展生态系统没有提供的开箱即用的东西。但是,我可以找到几种方法来绕过这个问题,但都有自己的一套缺点。
第一种方法是:
1.使用内容脚本注入我们自己的自定义脚本。
1.使用定制脚本扩展XHR的本地方法以读取响应。
1.将响应添加到网页DOM中的隐藏(而不是
display: none
)元素中。1.使用内容脚本读取隐藏的响应。
我已经在一篇博客文章here.中详细记录了这两种方法
如果你遇到任何问题,请告诉我
jdg4fx2g4#
要获得XHR响应主体,可以按照this answer中的说明进行操作。
要获取FETCH响应主体,您可以在this article和this answer中选中Solution 3。这两种方法都可以在不使用chrome.debugger的情况下获取响应主体。**
简而言之,您需要使用与XHR请求相同的方法将以下函数从内容脚本注入到页面中。
如果response.clone().json()不起作用,您可以尝试response.clone().text()
b4qexyjb5#
我显示我完成的代码,如果它可以是一些帮助。我添加了下划线,以获得请求的网址,谢谢
我还发现chrome.debugger.sendCommand中有一个bug。如果我有两个URI相同但参数不同的请求。例如:
第二个不会得到正确的响应正文,它将显示:
但是我直接在后台devtools调试,它得到了第二个正确的身体。
所以tabId和requestId没有问题,然后我用setTimeout封装chrome.debugger.sendCommand,它将正确地获得第一个和第二个responseBody。
我认为设置超时不是完美的解决方案,有人能给予帮助吗?谢谢。