如何使用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
相关产品推荐
相关产品推荐

