从Chrome API onCompleted方法获取请求和响应正文

yqlxgs2m  于 2023-02-27  发布在  Go
关注(0)|答案(2)|浏览(492)

如何记录请求和响应正文,chrome API onCompleted方法给出记录响应头。不打开开发者工具怎么办?
我正在开发一个Chrome扩展程序,我应该在其中捕获全部请求和响应。目前,对于响应,我能够单独捕获响应头,有没有办法捕获整个响应正文?我已经查看了所有的Chrome API,包括onComplete方法,它提供了仅捕获响应头的选项。此外,我希望在不打开开发者工具的情况下捕获此响应正文。

function recordData() {
  chrome.webRequest.onCompleted.addListener(function(recordStatus) {
    console.log("Recording Data" + recordStatus);
  }, {
    urls: ["http://*/*", "https://*/*"]
  }, ["responseHeaders"]);
}
hmtdttj4

hmtdttj41#

我用一个简单的方法来控制它。基于请求和响应的字段requestId
创建一个全局Map,当事件请求头到达时,使用键requestId将其放入Map中。完成后记得将其从Map中删除,否则您的后台页面可能会崩溃为Out of Memory
Chrome extensions - Other ways to read response bodies than chrome.devtools.network?

oxf4rvwz

oxf4rvwz2#

您正在使用错误的webRequest。

onCompleted监听器在最后(这是最后一个)触发,所以它只在没有页面刷新的情况下监视“鬼鬼祟祟”的URL更改时有用,就像观看不同的U型管视频时发生的情况一样。

但是如果您想要的(我理解您)是捕获服务器和浏览器之间交换的Request和Response头,那么您必须使用这两个侦听器:

var Log1='';  // Let's save all REQUEST headers in this string.

chrome.webRequest.onBeforeSendHeaders.addListener(function(details){

 Log1 = details.requestId +' - '+ details.method +' - '+ details.frameId +' - '+ details.type +' - '+ details.url +'<br>'+ Log1;

},{urls:['<all_urls>']},['blocking','requestHeaders']);



var Log2='';  // Let's save all RESPONSE headers in this string.

chrome.webRequest.onHeadersReceived.addListener(function(details){

 let D=details.responseHeaders;

 for(var i=0; i<D.length; i++){

  Log2 = D[i].name +' - '+ D[i].value + '<br>' + Log2;

 }

},{urls:['<all_urls>']},['blocking','responseHeaders']);

**NB:**在第一个监听器中,我只保存了有趣的部分,但是你总是可以使用一个循环来捕获 * 所有内容 *,就像下面的监听器一样。

捕获所有内容意味着重复用户代理和所有其他重复的无聊标题。
我知道我来晚了但也许有人需要这一切。

相关问题