本篇内容介绍了“Electron网络拦截的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Electron 提供的 WEBReque
本篇内容介绍了“Electron网络拦截的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Electron 提供的 WEBRequest api,允许开发者对网络进行过滤和监听,并且可以修改 header 字段甚至请求地址,功能非常强大,它的类结构如下:
不过需要注意,该模块只能在主进程中使用,接下来为大家介绍 webRequest 三个非常典型的使用场景:
有些接口为了过滤非法请求,会首先校验 UserAgent,正常的浏览器是无法伪造 UA 的,不过在 Electron 里面可以很容易做到,webRequest 模块提供的 onBeforeSendHeaders
方法能够对域名进行过滤,拦截即将发出去的请求头,修改之后再真正的发出去。例如下面的代码会在访问 GitHub 相关域名的时候,把 header 中的 User-Agent 字段修改为 MyAwesomeAgent:
const { session } = require('electron')const filter = { urls: ['https:/*'],}win.webContents.session.webRequest.onHeadersReceived(filter, (details, callback) => { const { responseHeaders } = details responseHeaders['Access-Control-Allow-Origin'] = ['*'] callback({ responseHeaders })})
打开网络面板观察网络请求,响应标头里面就有 Access-Control-Allow-Origin
了,成功绕过 cors 校验:
通过 webRequest API,可以将发到接口 A 的请求转发到接口 B。为了验证这个能力,我们写了一个 Http 服务,同时监听 3030 和 4040 端口,并响应 JSON 数据,里面包含了 port 字段表示当前请求到了哪个端口:
const http = require('http')const URL = require('url')function listen(port) { http .createServer((req, res) => { const { url, method, headers } = req const { query, pathname } = URL.parse(url, true) res.setHeader('Content-Type', 'application/json') res.end(JSON.stringify({ method, pathname, query, headers, port })) }) .listen(port)}listen(3030)listen(4040)
然后通过 onBeforeRequest
方法进行拦截:
win.webContents.session.webRequest.onBeforeRequest( { urls: ['http://localhost:3030/*'], }, (details, callback) => { callback({ redirectURL: 'http://localhost:4040' }) },)
在控制台发送 3030 端口请求,结果返回了 4040 端口的数据:
这个能力非常强大,例如可以做下面的事情:
“Electron网络拦截的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
--结束END--
本文标题: Electron网络拦截的方法是什么
本文链接: https://www.lsjlt.com/news/351229.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0