.NET 版 Chromium WebBrowser 动态设置 http, https, socks5 代理方法。
private void InitWebBrowser(string url)
{
ChromiumWebBrowser browser = new ChromiumWebBrowser(url);
browser.Dock = DockStyle.Fill;
//绑定 WebBrowser 初始化完成事件
browser.IsBrowserInitializedChanged += Browser_IsBrowserInitializedChanged;
//添加到WinForm中
this.Controls.Add(browser);
browser.BringToFront();
}
private void Browser_IsBrowserInitializedChanged(object sender, IsBrowserInitializedChangedEventArgs e)
{
if(e.IsBrowserInitialized)
{
//只能在WebBrowser UI呈现后获取 Request 上下文
Cef.UIThreadTaskFactory.StartNew(delegate
{
//获取 Request 上下文
var rc = browser.GetBrowser().GetHost().RequestContext;
var dict = new Dictionary<string, object>();
dict.Add("mode", "fixed_servers");
dict.Add("server", "127.0.0.1:1080");
string error;
//设置代理
rc.SetPreference("proxy", dict, out error);
//如果 error 不为空则表示设置失败。
if(!string.IsNullOrWhiteSpace(error))
{
MessageBox.Show(error, "Tip", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
});
}
}
不要在 Cef.Initialize 时设置 CefCommandLineArgs.Add("proxy-server", "127.0.0.1:1080");,否则修改代理设置会失败。