博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Electron使用时拦截HTTP请求的解决方案
阅读量:5343 次
发布时间:2019-06-15

本文共 1598 字,大约阅读时间需要 5 分钟。

背景

最近在做一个Web和Electron共用一份代码的工程,由于使用到了第三方的库(我们是在线地图),该库的认证方式是请求时加key,并且它在后台会校验referer。

于是问题就来了,Electron是运行在本地的,http请求的时候,是不会带有授权Web站点的referer的。导致认证失败,无法调用所需的api接口。

分析

既然HTTP请求发送的时候不带referer,那么我们给他加上去,是不是就可以了呢?

对策

方法1:自定义HTTP协议,在发送请求时,补上referer

// 注册自定义协议protocol.registerStandardSchemes(['app', '自定义协议'], { secure: true })// 自定义协议的具体实现protocol.registerHttpProtocol('自定义协议', (req, cb) => {        cb({            url: “特定的url地址”,            referrer: "http://被授权的referrer头信息"        })    })// 发送请求时可以使用 自定义协议://url地址 的形式来发送请求
发送请求时可以使用 自定义协议://url地址 的形式来发送请求。当然,我们这个例子里面只是追加了referrer,其实根据实际需求还可以做很多其它事情。 相关api文档:

方法2:修改窗口会话中发送请求前的行为

本来以为方法1以及很完美的解决了问题,但是,在自定义协议认证成功后,在api的使用过程中,api内部主动发送了http请求,这时的api请求没有使用自定义协议,再次认证失败了。于是我想到有个办法,很天真的认为可以解决问题。失败的做法如下:

protocol.interceptHttpProtocol("http", (req, cb) => {        // 此处可以追加url是否匹配的逻辑判断        cb({            url:req.url,            referrer: "http://授权的referrer头信息"        })    })

 

相关api文档:

我直接拦截了原生的http协议,追加referrer信息,发生的结果是,http->截获http->修改后发送http->截获http->修改后发送http->......发生了无限循环!!!

 

于是只能另辟蹊径,寻找其余解决方案。发现了webquest的行为可以捕获。于是在onBeforeSendHeaders的时机,追加Referer信息。正确的做法如下:

// 需要拦截的URL地址    const xxx_filter = {        urls: ["https://*.xxx.com/*", "http://*.yyy.com/*"]    }       session.defaultSession.webRequest.onBeforeSendHeaders(xxx_filter, (details, callback) => {        details.requestHeaders['Referer'] = 'http://授权的referer头信息'        callback({ requestHeaders: details.requestHeaders });    })

 

相关api文档:

总结

通过对webrequest的捕获,解决了本次的问题,并且把自定义协议那个案也可以替换掉。webrequest还有好几个阶段的行为可以自定义,可以适用于不同场景的需求。

转载于:https://www.cnblogs.com/Amar/p/11051016.html

你可能感兴趣的文章
Android 图片平铺实现方式
查看>>
个人工作总结03
查看>>
JPG、PNG和GIF图片的基本原理及优…
查看>>
oracle如何向空表中添加一个类型为clob的非空列
查看>>
堆和栈的区别
查看>>
操作系统(笔试系列)-第五讲存储器管理
查看>>
固定流程、自由流程和自定义流程的区别?
查看>>
jdbc作业3
查看>>
golang 单元测试
查看>>
一步一步学Linq to sql(七):并发与事务(非原创)
查看>>
javascript模态,非模态窗体
查看>>
判断DialogFragment是否隐藏的方法
查看>>
iOS:特殊符号大全
查看>>
C语言
查看>>
矩阵乘法 POJ3070 Fibonacci
查看>>
Git常用命令
查看>>
『.NET Core CLI工具文档』(十三)dotnet-publish
查看>>
Object C学习笔记6-如何在Windows环境搭建Object C开发环境
查看>>
eclipse如何查问题?
查看>>
swust oj 237
查看>>