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

     2023-02-16     103

关键词:

【中文标题】用于拦截/修改 websockets UA 的 Chrome 扩展 API【英文标题】:Chrome extension API for intercepting/modifying websockets UA 【发布时间】:2015-05-08 12:28:00 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

我在谷歌上搜索这个问题的答案,既然三年后的现在是可能的,我会在这里记录下来。

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

必须在清单中为 webRequest 和 webRequestBlocking 请求权限 还必须为 Web 套接字 URL 请求权限,例如“wss://*/”和“ws://*/” 在请求过滤器中(在 addListener 函数调用中),url 必须用 wss 或 ws 方案声明。使用 * 作为方案仅解析为 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']);

【讨论】:

这对我不起作用。我的 chrome 不拦截 websocket 请求(【参考方案2】:

恐怕不行。现在可以使用请求标头,请参阅this answer。

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

【讨论】:

Link 到功能请求。对于那些感兴趣的人。

fiddler拦截http请求修改数据

1、拦截http请求使用Fiddler进行HTTP断点调试是fiddler一强大和实用的工具之一。通过设置断点,Fiddler可以做到:①修改HTTP请求头信息。例如修改请求头的UA,Cookie,Referer信息,通过“伪造”相应信息达到相应的目的(调试,模拟... 查看详情

gorilla/websocket使用教程

...占用数据。这时Http则不能达到要求。所以自然想到采用websocket。以前使用SpringBoot时使用websocket很简单,只需要将ServerEndpointExporter注入到bean容器并配合相应注解即可创建一个websocket服务。这里要感谢各位前辈的封装让我们能尽... 查看详情

如何将异步服务用于角度 httpClient 拦截器

】如何将异步服务用于角度httpClient拦截器【英文标题】:HowuseasyncserviceintoangularhttpClientinterceptor【发布时间】:2018-01-0220:41:53【问题描述】:使用Angular4.3.1和HttpClient,我需要将异步服务的请求和响应修改为httpClient的HttpInterceptor... 查看详情

在 SSL WebSocket 连接 (wss) 中拦截请求

】在SSLWebSocket连接(wss)中拦截请求【英文标题】:InterceptrequestsinSSLWebSocketconnection(wss)【发布时间】:2021-05-2517:54:55【问题描述】:我有一个WSS服务器正在运行,我想拦截客户端和服务器之间的WebSocket消息。我能够使用WS(无SSL)... 查看详情

带有 websocket 和会话拦截器的 Spring + Tomcat = 问题

】带有websocket和会话拦截器的Spring+Tomcat=问题【英文标题】:Springwithwebsocketandsessioninterceptor+Tomcat=problem【发布时间】:2021-05-2611:36:22【问题描述】:我遇到了奇怪的问题。我正在使用WebSockets开发基于SpringBoot的Web应用程序。我需... 查看详情

Ngxs + WebSocket |如何拦截连接并添加自定义 HTTP 标头?

】Ngxs+WebSocket|如何拦截连接并添加自定义HTTP标头?【英文标题】:Ngxs+WebSocket|HowtointercepttheconnectionandaddcustomHTTPheader?【发布时间】:2018-11-2110:15:47【问题描述】:我正在使用ngxs\'NgxsWebsocketPluginModule从我的Angular应用程序中创建一... 查看详情

用于 Windows CE/Mobile 的 C++ 中的 HTTP Websockets 客户端库

】用于WindowsCE/Mobile的C++中的HTTPWebsockets客户端库【英文标题】:HTTPWebsocketsclientlibraryinC++forWindowsCE/Mobile【发布时间】:2014-11-2016:32:37【问题描述】:我正在寻找一个基于C/C++的http/websocket库,该库在使用WindowsSChannel(而不是OpenSSL... 查看详情

如何在中间件设置ua池,代理池(代码片段)

...    -操作流程:      1.在下载中间件中拦截请求      2.将拦截到的请求的请求头信息中的UA进行篡改伪装      3.在配置文件中开启下载中间件     代码展示:#导包fromscrapy.contrib.d... 查看详情

javax.servlet.Filter 会拦截 Websocket 消息吗? (Java Servlet API)

】javax.servlet.Filter会拦截Websocket消息吗?(JavaServletAPI)【英文标题】:Willjavax.servlet.FilterinterceptWebsocketmessages?(JavaServletAPI)【发布时间】:2014-07-2314:59:04【问题描述】:当我有一个websocket连接时,在“/ws”处说“/ws”路径上的常... 查看详情

用于 OPC UA 的 R 包

】用于OPCUA的R包【英文标题】:R-packageforOPCUA【发布时间】:2021-12-2606:13:34【问题描述】:我想知道是否有人使用OPC-UA通信标准为R开发包。我在CRAN和GitHub上都没有找到R-package。我的想法是对OPC-UA服务器发送的数据进行一些实时... 查看详情

mybatis实现sql查询拦截修改详解

...了InvocationHandler接口,InvocationHandler接口仅包含invoke方法用于回调方法。当执行代理对象的接口方法时,会调用Plugin的invoke方法,它会把要执行的对象,方法和参数打包成Invocation对象传给拦截器的intercept方法。Inv 查看详情

springboot中使用拦截器(代码片段)

...后台,更拔高一层的使用场景也有,比如拦截器可以结合websocket一起使用,用来拦截websocket请求,然后做相应的处理等等。拦截器不会拦截静态资源,SpringBoot的默认静态目录为resources/static,该目录下的静态页面、js、css、图片 查看详情

是否有任何用于 nodejs 的 websocket 插件

】是否有任何用于nodejs的websocket插件【英文标题】:Arethereanywebsocketpluginsfornodejs【发布时间】:2011-08-3002:43:54【问题描述】:有没有nodejs的websocket插件;我想开发一些使用websockets的应用程序。【问题讨论】:【参考方案1】:Chec... 查看详情

Tomcat 上的 Websockets:如何干净地关闭服务器?

】Tomcat上的Websockets:如何干净地关闭服务器?【英文标题】:WebsocketsonTomcat:howtoshutdowntheservercleanly?【发布时间】:2015-08-0708:35:37【问题描述】:如何拦截服务器上运行的端点的关闭事件(例如servlet的销毁方法)以用于日志记录... 查看详情

用于后台处理的 Websocket

】用于后台处理的Websocket【英文标题】:Websocketsforbackgroundprocessing【发布时间】:2011-09-0210:43:44【问题描述】:使用Websockets(彗星、服务器推送等)来解决长时间运行的HTTP请求的问题是个好主意吗?想象一下,您有一个应用程... 查看详情

大屏的接口开发一:基于springboot的websocket数据推送(代码片段)

...,实现数据的同步变动展示。这里主要使用SpringBoot集成webSocket实现数据的全局发送,指定用户发送,值得注意的是这里使用了Spring自带的握手拦截器获取前端传来的userId,与webSocket的会话进行绑定,用于长连接的身份区分。如... 查看详情

大屏的接口开发一:基于springboot的websocket数据推送(代码片段)

...,实现数据的同步变动展示。这里主要使用SpringBoot集成webSocket实现数据的全局发送,指定用户发送,值得注意的是这里使用了Spring自带的握手拦截器获取前端传来的userId,与webSocket的会话进行绑定,用于长连接的身份区分。如... 查看详情

RatchetPHP 没有用于新连接的 WebSocket 属性

】RatchetPHP没有用于新连接的WebSocket属性【英文标题】:RatchetPHPnoWebSocketpropertyfornewconnections【发布时间】:2017-08-2123:47:30【问题描述】:我正在尝试使用Ratchet在Websocket服务器的onOpen函数中访问传入连接的查询参数。officialdocumentat... 查看详情