如何在C# WinForms的WebView2中设置带账号密码的代理?
解决WebView2设置带用户名密码代理无效的问题
你当前的写法错误在于,Chromium(WebView2基于它)的--proxy-server参数不支持直接在地址后追加用户名和密码,所以这种格式不会生效。下面是两种可行的解决方案:
方案一:使用PAC脚本+注入认证头
PAC脚本可以定义代理规则,配合请求头注入认证信息实现带密码的代理:
- 构造PAC脚本并通过参数传入:
CoreWebView2EnvironmentOptions options = new CoreWebView2EnvironmentOptions(); // 用Data URI加载PAC脚本内容,无需本地文件 string pacScript = "function FindProxyForURL(url, host) { return \"PROXY 000.00.000.000:8080; DIRECT\"; }"; string pacDataUri = $"data:text/javascript;base64,{Convert.ToBase64String(Encoding.UTF8.GetBytes(pacScript))}"; options.AdditionalBrowserArguments = $"--proxy-pac-file={pacDataUri}";
- 在WebView2初始化后,注入代理认证头:
await webView2.EnsureCoreWebView2Async(); webView2.CoreWebView2.WebResourceRequested += (sender, args) => { if (!args.Request.Headers.Contains("Proxy-Authorization")) { string authBase64 = Convert.ToBase64String(Encoding.ASCII.GetBytes("username:password")); args.Request.Headers.Add("Proxy-Authorization", $"Basic {authBase64}"); } };
方案二:使用ProxySettings属性(需WebView2 Runtime 1.0.1587.40+)
如果你的WebView2 Runtime版本足够新,可直接通过内置属性设置带认证的代理:
// 先确保CoreWebView2初始化完成 await webView2.EnsureCoreWebView2Async(); webView2.CoreWebView2.ProxySettings.Mode = CoreWebView2ProxyMode.FixedServers; webView2.CoreWebView2.ProxySettings.Server = "000.00.000.000:8080"; webView2.CoreWebView2.ProxySettings.UserName = "username"; webView2.CoreWebView2.ProxySettings.Password = "password";
注意事项
- 优先确认WebView2 Runtime版本,旧版本不支持ProxySettings属性
- 检查代理地址、端口、账号密码的正确性,避免拼写错误
- 使用PAC脚本时,确保脚本逻辑无语法错误
内容的提问来源于stack exchange,提问作者raajrush
相关产品推荐
相关产品推荐

