Skip to content

设置代理

概述

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)

参数:

参数类型说明
urlstring代理服务器地址(如:http://proxy.com:8080
userstring代理用户名(可选)
passwordstring代理密码(可选)

AdvancedControl.SetProxy(VIP)

语法:

csharp
void SetProxy(string url, string user, string password, bool closemsg)

参数:

参数类型说明
urlstringSOCKS5代理地址(如:socks5://127.0.0.1:1080)
userstring代理用户名
passwordstring代理密码
closemsgbool是否关闭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包装代理设置操作
  • 代理连接失败时有适当的回退机制

最佳实践

  1. 测试验证:设置代理后验证其是否正常工作
  2. 资源管理:使用using语句管理VIP控制接口
  3. 错误处理:对代理设置进行异常处理
  4. 性能考虑:避免频繁切换代理,影响浏览器性能
  5. 安全性:妥善保管代理的用户名和密码信息

如果文档对您有帮助,欢迎 请喝咖啡 ☕ | 软件发布 | 源码购买