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

如何在WinForms中使用CefSharp完成带身份验证的代理授权配置?

CefSharp.WinForms代理配置及授权方案

方案1:全局固定代理配置(适合应用启动后代理不变的场景)

该方案要求配置操作必须在ChromiumWebBrowser实例第一次创建之前完成,修改的是整个Cef运行环境的全局代理规则。

// 建议在Program.Main或者窗体的Load事件最开头执行初始化
if (!Cef.IsInitialized)
{
    var settings = new CefSettings();
    // 配置代理地址,格式支持http/https/socks5,示例:socks5://127.0.0.1:1080
    settings.CefCommandLineArgs.Add("proxy-server", "你的代理IP:端口");
    // 可选配置:不走代理的域名列表,<local>代表本地地址
    settings.CefCommandLineArgs.Add("proxy-bypass-list", "<local>,*.不需要走代理的域名.com");
    Cef.Initialize(settings);
}

如果你的代理需要用户名密码授权,需要自定义请求处理器实现认证逻辑:

public class ProxyAuthRequestHandler : RequestHandler
{
    private readonly string _userName;
    private readonly string _password;

    public ProxyAuthRequestHandler(string userName, string password)
    {
        _userName = userName;
        _password = password;
    }

    protected override bool GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
    {
        // 仅处理代理的认证请求
        if (isProxy)
        {
            callback.Continue(_userName, _password);
            return true;
        }
        return base.GetAuthCredentials(chromiumWebBrowser, browser, originUrl, isProxy, host, port, realm, scheme, callback);
    }
}

将处理器绑定到你的浏览器实例即可,你的原有代码修改后如下:

tabControl1.TabPages.Add("load");
chromeBrowser = new ChromiumWebBrowser("https://www.google.com/");
// 新增这行绑定代理认证逻辑,替换为你自己的代理账号密码
chromeBrowser.RequestHandler = new ProxyAuthRequestHandler("代理用户名", "代理密码");
tabControl1.TabPages[tabControl1.TabPages.Count -1].Controls.Add(chromeBrowser);
tabControl1.ItemSize = new Size(200, 30);
tabControl1.SelectedTab = tabControl1.TabPages[tabControl1.TabPages.Count - 1];
tabControl1.MouseClick += ShowContextMenuTabs;
activeCurrentBrowser = chromeBrowser;
chromeBrowser.AddressChanged += ChromeBrowser_AddressChanged;
chromeBrowser.LoadingStateChanged += ChromeBrowser_LoadingStateChanged;

方案2:动态代理配置(适合运行时需要切换代理、不同浏览器实例用不同代理的场景)

该方案不需要修改全局Cef配置,通过独立的RequestContext给单个浏览器实例设置专属代理:

// 创建独立的请求上下文
var contextSettings = new RequestContextSettings
{
    CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharpCustomCache")
};
var customContext = new RequestContext(contextSettings);
// 异步设置代理,协议可选http/socks5
await customContext.SetProxyAsync("http", "代理IP", 代理端口);

// 创建浏览器时传入自定义请求上下文
chromeBrowser = new ChromiumWebBrowser("https://www.google.com/", customContext);
// 同样绑定上面的ProxyAuthRequestHandler处理代理认证
chromeBrowser.RequestHandler = new ProxyAuthRequestHandler("代理用户名", "代理密码");

注意事项

  • 所有Cef初始化、浏览器实例创建操作必须在UI线程执行
  • 若使用socks5代理,代理地址前缀改为socks5://即可
  • Cef.Initialize全局仅能调用一次,重复调用会触发异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:36:08