You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron中session.setProxy配置带账号密码的代理失效问题

解决Electron session.setProxy中配置用户名密码的问题

你遇到的问题其实是Electron的setProxy方法不支持直接在proxyRules中嵌入用户名和密码——这种URL格式虽然常见于一些工具,但Electron的代理配置逻辑并不识别这种写法,所以你的配置才会失效。

正确的做法是通过监听session的proxy-authorization事件来处理代理认证,具体步骤如下:

1. 先配置基础代理规则(不带用户名密码)

首先调用setProxy时,只指定代理地址和端口,不要包含认证信息:

const { session } = require('electron');

const targetSession = session.fromPartition("persist:sessionOne");
targetSession.setProxy({
  proxyRules: "http://proxyIp:proxyPort",
  proxyBypassRules: ""
}, () => {
  console.log("代理规则已设置");
});

2. 监听proxy-authorization事件添加认证信息

在同一个session上监听proxy-authorization事件,当代理服务器请求认证时,通过request.setProxyAuthorization方法传入Base64编码的用户名和密码:

targetSession.on('proxy-authorization', (event, request) => {
  // 将用户名和密码转换为Base64编码
  const auth = Buffer.from("username:password").toString('base64');
  // 设置代理认证头
  request.setProxyAuthorization(`Basic ${auth}`);
});

关键说明

  • proxy-authorization事件会在代理服务器返回407需要认证时触发,我们在这里动态注入认证信息,这是Electron官方推荐的代理认证方式。
  • 确保你使用的session实例是正确的(比如示例中的persist:sessionOne分区),如果是主窗口的session,可以直接用session.defaultSession。
  • 如果你的代理是HTTPS类型,只需要把proxyRules中的http改成https即可,认证逻辑完全一致。

额外注意事项

  • 如果你使用的是PAC脚本,同样无法在PAC中直接嵌入认证信息,仍然需要通过proxy-authorization事件处理。
  • 测试时可以打开开发者工具的网络面板,查看请求的代理认证头是否正确发送,帮助排查问题。

内容的提问来源于stack exchange,提问作者JCP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:52:32