用于拦截/修改Websockets UA的Chrome扩展API

问题描述 投票:0回答:4

我正在尝试编写一个扩展,它将修改来自 Chrome 的所有传出请求的用户代理。

对于 http://、https://、ftp://、file:// 或 chrome-extension://,我可以使用 chrome.webRequest API

onBeforeSendHeaders
。但是,这不适用于 ws:// 或 wss://。

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

javascript google-chrome google-chrome-extension websocket user-agent
4个回答
8
投票

我在谷歌上搜索这个问题的答案,因为三年后的现在,这是可能的,我将在这里记录它。

根据 https://developer.chrome.com/extensions/webRequest,它应该可以在 Chrome 58 上运行。但是需要进行一些配置才能使其工作。

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

请记住,webRequest 只能在后台脚本中使用,而不能在内容脚本中使用。

示例(更改 Origin 标头,更改 User Agent 应该类似)

在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']);

3
投票

恐怕不行。现在可以使用请求标头,请参阅这个答案

不过,这将是一个很好的功能请求。


1
投票

如果有人使用新的

declarativeNetRequest
api 并想要阻止 websocket,您需要使用
wss://
协议提及 url,例如:
urlFilter: "wss://augloop.office.com"

chrome.declarativeNetRequest.updateDynamicRules(
  {
    addRules: [
      {
        action: {
          type: "block",
        },
        condition: {
          urlFilter: 'wss://augloop.office.com/', //block this websocket
          domains: ["example.com"], // on this domain
        },
        id: 2,
        priority: 1,
      },
    ],
  },
  () => {
    console.log("block rule added");
  }
);


0
投票

对于清单版本 3: 需要在主机权限中声明WebSocket

"host_permissions": ["*://*/*", "wss://*/*"],
© www.soinside.com 2019 - 2024. All rights reserved.