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

如何使用Rust的chromiumoxide crate配置代理服务器?

使用chromiumoxide配置代理服务器的方法

chromiumoxide 基于Chrome DevTools Protocol,代理配置本质是通过传递Chrome的启动命令行参数实现的,下面是几种常见场景的配置示例:

1. 普通HTTP/HTTPS代理

直接通过--proxy-server参数指定代理地址:

use chromiumoxide::browser::{Browser, BrowserConfig};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 替换为你的代理地址,格式:http://host:port
    let proxy_addr = "http://127.0.0.1:8080";
    
    let config = BrowserConfig::builder()
        .args([format!("--proxy-server={}", proxy_addr)])
        .build()?;
    
    let (browser, mut handler) = Browser::launch(config).await?;
    
    // 示例:打开目标页面
    let page = browser.new_page("https://example.com").await?;
    
    // 启动处理任务
    tokio::spawn(async move {
        let _ = handler.run().await;
    });
    
    Ok(())
}

2. SOCKS5代理

只需修改代理地址的协议前缀为socks5://:

use chromiumoxide::browser::{Browser, BrowserConfig};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let proxy_addr = "socks5://127.0.0.1:1080";
    
    let config = BrowserConfig::builder()
        .args([format!("--proxy-server={}", proxy_addr)])
        .build()?;
    
    let (browser, mut handler) = Browser::launch(config).await?;
    let page = browser.new_page("https://example.com").await?;
    
    tokio::spawn(async move {
        let _ = handler.run().await;
    });
    
    Ok(())
}

3. 需要身份认证的代理

Chrome命令行不直接支持在--proxy-server中嵌入账号密码,需结合--proxy-auth参数和PAC脚本:

use chromiumoxide::browser::{Browser, BrowserConfig};
use base64;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let proxy_user = "your_username";
    let proxy_pass = "your_password";
    let proxy_host = "127.0.0.1";
    let proxy_port = 8080;
    
    // 构建PAC脚本,指定代理路由规则
    let pac_script = format!(
        r#"
        function FindProxyForURL(url, host) {{
            return "PROXY {}:{}; DIRECT";
        }}
        "#,
        proxy_host, proxy_port
    );
    
    // 将PAC脚本转为Base64编码的Data URI
    let pac_data_uri = format!("data:text/plain;base64,{}", base64::encode(pac_script));
    
    let config = BrowserConfig::builder()
        .args([
            format!("--proxy-pac-url={}", pac_data_uri),
            format!("--proxy-auth={}:{}", proxy_user, proxy_pass)
        ])
        .build()?;
    
    let (browser, mut handler) = Browser::launch(config).await?;
    let page = browser.new_page("https://example.com").await?;
    
    tokio::spawn(async move {
        let _ = handler.run().await;
    });
    
    Ok(())
}

注意事项

  • 确保代理服务器处于运行状态且可访问,本地代理需检查防火墙设置
  • 代理参数需与Chrome的命令行参数规范一致,chromiumoxide只是传递这些参数给底层Chrome进程
  • 若遇到代理无效的情况,可手动启动Chrome并添加相同参数验证是否生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:01:19