Chrome扩展程序API,用于拦截/修改websockets UA

时间:2015-05-08 12:28:01

标签: javascript google-chrome google-chrome-extension websocket user-agent

我正在尝试编写一个扩展程序,用于修改Chrome上所有传出请求的User-Agent。

对于http://,https://,ftp://,file://或chrome-extension://我可以使用chrome.webRequest APIonBeforeSendHeaders。但是,这不适用于ws://或wss://。

是否有其他API允许我在这些请求上设置/修改标头?

2 个答案:

答案 0 :(得分:4)

我正在谷歌上搜索这个问题的答案,现在,三年之后,我可以在这里记录下来。

根据https://developer.chrome.com/extensions/webRequest,它应该可以在Chrome 58中运行。但是为了使其运行,需要几种配置。

  • 必须为webRequest和webRequestBlocking
  • 请求清单权限
  • 还必须为Web套接字URL请求权限,例如" wss:// * /"和" ws:// * /"
  • 在请求过滤器中(在addListener函数调用中),必须使用wss或ws方案声明url。使用* as scheme解析为http和仅https
  • 在请求过滤器中,必须在类型中声明websocket。 (我不确定这是否是必需的,我没时间核实)

请记住,webRequest仅在后台脚本中可用,而不在内容脚本中。

示例(更改Origin标头,更改用户代理应该类似)

在manifest.json中:

"permissions": [
"storage",
"tabs",
"activeTab",
"webRequest",
"webRequestBlocking",
"webNavigation",
"debugger",
"https://*/",
"wss://*/"
],

在后台脚本中

// origin is defined somewhere above
chrome.webRequest.onBeforeSendHeaders.addListener((details) => {
      if (origin) {
        const headers = details.requestHeaders;
        for (let i = 0; i < headers.length; i++) {
          if (headers[i].name === 'Origin') {
            headers[i].value = origin;
          }
        }
        return { requestHeaders: headers };
      }
    }, { urls: ['wss://server.example.com/*', 'https://server.example.com/*'],
         types: ['xmlhttprequest', 'websocket'] },
       ['requestHeaders', 'blocking']);

答案 1 :(得分:2)

我不敢。现在请求标题可用,请参阅this answer

这可能是一个不错的功能请求。