设置代理
概述
FBro支持为浏览器设置HTTP/HTTPS代理和SOCKS5代理。代理设置可以是全局的,也可以配合独立缓存实现每个浏览器的独立代理配置。
代理类型
1. 普通代理
- HTTP/HTTPS代理
- 支持无认证和有认证的代理
- 使用浏览器基础方法设置
2. SOCKS5代理(VIP功能)
- 支持带账号密码的SOCKS5代理
- 需要使用VIP控制接口
- 支持错误提示控制
普通代理设置
基础方法
1. 设置无认证代理
csharp
// 设置HTTP代理
browser.SetProxy("http://proxy.example.com:8080");
// 设置HTTPS代理
browser.SetProxy("https://proxy.example.com:8080");2. 设置有认证代理
csharp
// 设置带用户名密码的代理
browser.SetProxy("http://proxy.example.com:8080", "username", "password");3. 清空代理
csharp
// 清除当前浏览器的代理设置
browser.ClearProxy();设置时机
代理设置建议在以下事件中进行:
- 浏览器创建完毕事件(
OnAfterCreated) - 即将导航事件(
OnBeforeBrowse)
csharp
public class BrowserEvent : FBroSharpBrowserEvent
{
public override void OnAfterCreated(IFBroSharpBrowser browser, IFBroSharpDictionaryValue extrainfo)
{
// 在浏览器创建完成后设置代理
browser.SetProxy("http://proxy.example.com:8080", "user", "pass");
}
}独立代理配置
配合独立缓存可以实现每个浏览器使用不同的代理:
csharp
public static void CreateBrowserWithProxy(string url, string proxyUrl, string cachePath)
{
// 设置独立缓存
FBroSharpRequestContextSet contextSet = new FBroSharpRequestContextSet();
contextSet.cache_path = cachePath;
FBroSharpRequestContext request_context = (FBroSharpRequestContext)FBroSharpRequestContext.CreateContext(contextSet);
// 创建浏览器事件
BrowserEvent browser_event = new BrowserEvent();
// 窗口配置
FBroSharpWindowsInfo windows_info = new FBroSharpWindowsInfo
{
parent_window = IntPtr.Zero, // 创建弹窗
width = 1200,
height = 800
};
// 创建浏览器
if (FBroSharpControl.CreatBrowser(url, windows_info, default, request_context, default, browser_event, default))
{
Console.WriteLine("带独立代理的浏览器创建成功");
}
}
public class BrowserEvent : FBroSharpBrowserEvent
{
public override void OnAfterCreated(IFBroSharpBrowser browser, IFBroSharpDictionaryValue extrainfo)
{
// 设置该浏览器的独立代理
browser.SetProxy("http://proxy.example.com:8080", "user", "pass");
}
}SOCKS5代理设置(VIP功能)
基础用法
csharp
// 获取VIP控制接口
using (var vipControl = browser.GetVIPControl())
{
var advancedControl = vipControl.GetAdvancedControl();
// 设置SOCKS5代理
advancedControl.SetProxy("socks5://127.0.0.1:1080", "username", "password", true);
}详细示例
csharp
public void SetSocks5Proxy(IFBroSharpBrowser browser, string proxyUrl, string username, string password)
{
try
{
// 获取VIP控制类
using (var vipControl = browser.GetVIPControl())
{
// 获取高级功能控制类
var advancedControl = vipControl.GetAdvancedControl();
// 设置SOCKS5代理
// closemsg: true表示关闭SOCKS5错误弹窗提示
advancedControl.SetProxy(proxyUrl, username, password, true);
Console.WriteLine($"SOCKS5代理设置成功: {proxyUrl}");
}
}
catch (Exception ex)
{
Console.WriteLine($"SOCKS5代理设置失败: {ex.Message}");
}
}
public void ClearSocks5Proxy(IFBroSharpBrowser browser)
{
try
{
using (var vipControl = browser.GetVIPControl())
{
var advancedControl = vipControl.GetAdvancedControl();
// 清除SOCKS5代理
advancedControl.ClearProxy();
Console.WriteLine("SOCKS5代理已清除");
}
}
catch (Exception ex)
{
Console.WriteLine($"清除SOCKS5代理失败: {ex.Message}");
}
}方法详细说明
browser.SetProxy
语法:
csharp
void SetProxy(string url)
void SetProxy(string url, string user, string password)参数:
| 参数 | 类型 | 说明 |
|---|---|---|
url | string | 代理服务器地址(如:http://proxy.com:8080) |
user | string | 代理用户名(可选) |
password | string | 代理密码(可选) |
AdvancedControl.SetProxy(VIP)
语法:
csharp
void SetProxy(string url, string user, string password, bool closemsg)参数:
| 参数 | 类型 | 说明 |
|---|---|---|
url | string | SOCKS5代理地址(如:socks5://127.0.0.1:1080) |
user | string | 代理用户名 |
password | string | 代理密码 |
closemsg | bool | 是否关闭SOCKS5错误提示弹窗 |
实际应用示例
1. 多浏览器不同代理
csharp
public void CreateMultipleBrowsersWithDifferentProxies()
{
var proxies = new[]
{
new { Url = "http://proxy1.com:8080", User = "user1", Pass = "pass1", Cache = "cache1" },
new { Url = "http://proxy2.com:8080", User = "user2", Pass = "pass2", Cache = "cache2" },
new { Url = "socks5://127.0.0.1:1080", User = "user3", Pass = "pass3", Cache = "cache3" }
};
foreach (var proxy in proxies)
{
CreateBrowserWithProxy("https://www.example.com", proxy.Url, proxy.Cache);
Thread.Sleep(1000); // 避免同时创建过多浏览器
}
}2. 动态代理切换
csharp
public void SwitchProxy(IFBroSharpBrowser browser, string newProxyUrl, string user, string pass)
{
try
{
// 先清除现有代理
browser.ClearProxy();
Thread.Sleep(500);
// 设置新代理
browser.SetProxy(newProxyUrl, user, pass);
// 刷新页面使代理生效
browser.GetMainFrame().LoadURL(browser.GetMainFrame().GetURL());
Console.WriteLine($"代理已切换到: {newProxyUrl}");
}
catch (Exception ex)
{
Console.WriteLine($"代理切换失败: {ex.Message}");
}
}3. 代理验证
csharp
public async Task<bool> ValidateProxy(string proxyUrl, string user, string password)
{
try
{
// 创建测试浏览器
var testBrowser = CreateTestBrowser();
// 设置代理
testBrowser.SetProxy(proxyUrl, user, password);
// 访问IP检查网站
testBrowser.GetMainFrame().LoadURL("https://httpbin.org/ip");
// 等待页面加载完成
await Task.Delay(5000);
// 检查是否成功获取IP信息
// 这里可以通过JavaScript获取页面内容来验证
return true;
}
catch (Exception ex)
{
Console.WriteLine($"代理验证失败: {ex.Message}");
return false;
}
}注意事项
1. 设置时机
- 代理设置建议在浏览器创建完成后或导航前进行
- 在其他时机设置可能需要刷新页面才能生效
2. 独立性配置
- 配合独立缓存使用可实现每个浏览器的独立代理
- 不使用独立缓存时代理设置可能影响全局
3. SOCKS5限制
- 带认证的SOCKS5代理需要VIP功能
- 建议启用错误提示关闭以避免弹窗干扰
4. 代理格式
- HTTP代理:
http://proxy.com:port - HTTPS代理:
https://proxy.com:port - SOCKS5代理:
socks5://proxy.com:port
5. 错误处理
- 始终使用try-catch包装代理设置操作
- 代理连接失败时有适当的回退机制
最佳实践
- 测试验证:设置代理后验证其是否正常工作
- 资源管理:使用
using语句管理VIP控制接口 - 错误处理:对代理设置进行异常处理
- 性能考虑:避免频繁切换代理,影响浏览器性能
- 安全性:妥善保管代理的用户名和密码信息