背景
开发过程中,用户设置的系统代理是不同的,比如公司内的服务器,所以就要动态地使用系统代理来访问,但是主进程默认为控制台级别的请求,不走系统代理,除非你指定系统代理配置,这个就就有了这篇内容
思路
网上其实已经有了一篇文章写了这块,这里权当总结
-
通过 electron 自带 session 请求来判断是否走了代理,这里的 session 相当于一个渲染进程的 session,所以走的是系统代理;
-
通过 electron 执行 cmd 命令来返回系统代理配置,这个兼容性比较麻烦,mac,windows 各不相同,不推荐;
-
通过内部通信,委派渲染进程来干这件事,但是这个如果来回传递 10M 左右的数据,则会造成内存溢出,原因不详,总之通信不能进行大数据传输,electron 的 bug
-
综上所述,还是自带的 session 方式比较靠谱,但是遇上 mac socks5 有账号密码时,返回的不清楚是啥,还未尝试
代码实现
Electron 主进程获取系统代理代码
async function getSystemProxy() {
const proxyUrl = await session.defaultSession.resolveProxy('https://www.baidu.com');
if (proxyUrl.startsWith('PROXY')) {
const [host, port]