这似乎是一个难题(或者不可能?)。 我想通过观看Chrome扩展程序后台脚本来获取并阅读由浏览器中的HTTP请求引起的HTTP响应。 我们可以用这种方式获取HTTP Request Body
chrome.webRequest.onBeforeRequest.addListener(function(data){
// data contains request_body
},{'urls':[]},['requestBody']);
我还检查了这些stackoverflows
是否有任何聪明的方法可以在Chrome扩展程序中获取HTTP响应正文?
答案 0 :(得分:20)
我找不到更好的方式然后这个anwser。
Chrome extension to read HTTP response
anwser告诉如何获取响应标题并显示在另一个页面中。但是响应obj中没有正文信息(请参阅event-responseReceived)。如果您想在没有其他页面的情况下获得 body 的回复,请尝试此操作。
var currentTab;
var version = "1.0";
chrome.tabs.query( //get current Tab
{
currentWindow: true,
active: true
},
function(tabArray) {
currentTab = tabArray[0];
chrome.debugger.attach({ //debug at current tab
tabId: currentTab.id
}, version, onAttach.bind(null, currentTab.id));
}
)
function onAttach(tabId) {
chrome.debugger.sendCommand({ //first enable the Network
tabId: tabId
}, "Network.enable");
chrome.debugger.onEvent.addListener(allEventHandler);
}
function allEventHandler(debuggeeId, message, params) {
if (currentTab.id != debuggeeId.tabId) {
return;
}
if (message == "Network.responseReceived") { //response return
chrome.debugger.sendCommand({
tabId: debuggeeId.tabId
}, "Network.getResponseBody", {
"requestId": params.requestId
}, function(response) {
// you get the response body here!
// you can close the debugger tips by:
chrome.debugger.detach(debuggeeId);
});
}
}
我认为它对我来说足够有用,你可以使用chrome.debugger.detach(debuggeeId)
关闭丑陋的小费。
答案 1 :(得分:1)
这绝对不是Chrome扩展生态系统开箱即用提供的功能。但是,我可以找到几种方法来解决此问题,但是两种方法都有其自身的缺点。
第一种方式是:
display: none
)中。第二种方式是创建一个 DevTools扩展,这是唯一提供用于读取每个请求的API的扩展。
我在博客文章here.
中详细介绍了这两种方法让我知道您是否遇到任何问题! :)
答案 2 :(得分:-1)
Chrome开发者工具扩展中现在提供了一种方法,示例代码可在此处查看:blog post。
简而言之,这是他的示例代码的改编:
chrome.devtools.network.onRequestFinished.addListener(request => {
request.getContent((body) => {
if (request.request && request.request.url) {
if (request.request.url.includes('facebook.com')) {
//continue with custom code
var bodyObj = JSON.parse(body);//etc.
}
}
});
});