我可以使用Chrome扩展程序修改外发请求标头吗?

Pet*_*ton 37 google-chrome google-chrome-extension

我在开发人员指南中看不到这个问题的答案,但也许我找不到合适的地方.

我想拦截使用Chrome扩展程序的HTTP请求,然后将其转发,可能使用新的/不同的HTTP标头 - 我该怎么做?

sac*_*024 41

PS:我是这个扩展的作者所以你可以责备我任何你不喜欢的东西:)

当OP提出这个问题时肯定不可能,但不久后Chrome发布了实验性的WebRequest API.但现在他们已正式加入Chrome扩展程序.您可以在Chrome中使用它修改请求和响应标头.

看看这个例子:

chrome.webRequest.onBeforeSendHeaders.addListener(
  function(details) {
    for (var i = 0; i < details.requestHeaders.length; ++i) {
      if (details.requestHeaders[i].name === 'User-Agent') {
        details.requestHeaders.splice(i, 1);
        break;
      }
    }
    return { requestHeaders: details.requestHeaders };
  },
  {urls: ['<all_urls>']},
  [ 'blocking', 'requestHeaders']
);
Run Code Online (Sandbox Code Playgroud)

如果您想使用Chrome扩展程序,可以使用Requestly,它允许您根据需要修改请求和响应标头.看看这个快照:

标题规则

  • 感谢blunderboy,不要担心 - 你的形象非常好.作为作者,你从存储库链接中已经不言而喻了,并且鉴于你首先确定了API并展示了示例代码(更不用说它是一个开源项目),因此对它来说是一个"广告"是相当愚蠢的要做的事. (24认同)
  • 我会淡化**'ADVERTISEMENT`**.1)你应该明确地披露它是你自己的创作,2)也许一个巨大的截图是不合适的. (10认同)
  • @Xan我已经添加了PPS说"我是作者".你是对的我应该先做到这一点.快照可能/可能不合适,我会在这里.如果您强烈认为它不应该在那里,请将其删除.我很好.感谢您的输入.我很感激 (3认同)
  • 好吧,我很高兴 - 请求我在2分钟内完成了我的小测试,这将花费大约20分钟的API编码. (3认同)
  • +1 - 使用它来调试 ajax,设置为 Modify Headers -&gt; Add -&gt; Request -&gt; "X-Requested-With" -&gt; "XMLHttpRequest" (2认同)

小智 11

chrome 17支持修改请求标头(https://developer.chrome.com/extensions/webRequest).


Jos*_*ush 6

对于使用清单版本 3 的扩展,您不能再使用chrome.webRequest.onBeforeSendHeaders.*. 另一种选择是chrome.declarativeNetRequest

在manifest.json中进行以下更改:

{
  ...
  "manifest_version": 3,
  "background": {
    "service_worker": "background.js"
  },
  "host_permissions": ["<all_urls>"],
  "permissions": [
    "declarativeNetRequest"
  ],
  ...
}
Run Code Online (Sandbox Code Playgroud)
  • "<all_urls>"用于修改所有传出网址的标头。将此限制在您的工作范围内

在您的background.js中进行以下更改:

// ...

const MY_CUSTOM_RULE_ID = 1

chrome.declarativeNetRequest.updateDynamicRules({
    removeRuleIds: [MY_CUSTOM_RULE_ID],
    addRules: [
        {
            id: MY_CUSTOM_RULE_ID,
            priority: 1,
            action: {
                type: "modifyHeaders",
                requestHeaders: [
                    {
                        operation: "set",
                        header: "my-custom-header",
                        value: "my custom header value"
                    }
                ]
            },
            condition: {
                "resourceTypes": ["main_frame", "sub_frame"]
            },
        }
    ],
});

Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

阅读文档https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/