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

如何使用reqwest通过10个代理并行发起HTTPS请求?

使用reqwest实现多代理并行请求

要实现从不同IP(通过指定代理)并行发起10个请求,且每个请求按顺序对应数组中的代理,你需要为每个代理单独配置请求客户端,同时借助异步任务合并工具实现并行执行。

实现思路

  • 遍历代理数组,为每个代理创建独立的异步请求任务
  • 使用futures::future::join_all合并所有任务,等待全部请求完成
  • 每个任务绑定对应索引的代理,确保请求按代理顺序分配

完整代码

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 10个代理的数组
    let proxies = [
        "https://example.prox:4545",
        "https://example.prox:8080",
        "https://example.prox:80",
        "https://example.prox:90",
        "https://example.prox:9050",
        "https://example.prox:3128",
        "https://example.prox:8888",
        "https://example.prox:5555",
        "https://example.prox:7777",
        "https://example.prox:6666",
    ];
    let target_url = "http://httpbin.org/ip";

    // 生成所有异步请求任务
    let tasks = proxies.iter().map(|proxy| async move {
        // 为当前代理创建专属客户端
        let client = reqwest::Client::builder()
            .proxy(reqwest::Proxy::all(proxy)?)
            .build()?;
        
        // 发送请求并获取响应内容
        let resp = client.get(target_url).send().await?;
        let body = resp.text().await?;
        Ok((proxy, body)) as Result<(&str, String), Box<dyn std::error::Error>>
    });

    // 并行执行所有任务并等待结果返回
    let results = futures::future::join_all(tasks).await;

    // 逐个处理请求结果
    for (proxy, result) in proxies.iter().zip(results) {
        match result {
            Ok((_, body)) => println!("代理 {} 请求结果:\n{}", proxy, body),
            Err(e) => eprintln!("代理 {} 请求失败: {}", proxy, e),
        }
    }

    Ok(())
}

关键细节

  • 每个请求使用独立的客户端绑定对应代理,避免代理配置冲突
  • join_all确保所有请求同时发起,实现真正的并行处理
  • 结果遍历关联原代理地址,便于定位单个代理的请求问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:02:34