rust 如何使用reqwest进行一些并行https请求?

omvjsjqw  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(165)

我需要从不同的IP向网站提出10个并行请求(同时)。
我有一个10代理阵列,我需要作出10个并行请求的网站使用10个代理中的一个为每个请求的顺序。

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let proxy = [
        "https://example.prox:4545",
        "https://example.prox:8080",
        "https://example.prox:80",
        "https://example.prox:90",
        "https://example.prox:9050",
        // ... array of 10 proxy
    ];
    let client = reqwest::Client::builder()
        .proxy(reqwest::Proxy::all("https://example.prox:4545")?)
        .build()?;

    let url = "http://httpbin.org/ip";

    let resp = client.get(url).send().await?;

    Ok(())
}
wz3gfoph

wz3gfoph1#

使用futures::future::join_all()

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let proxy = [
        "https://example.prox:4545",
        "https://example.prox:8080",
        "https://example.prox:80",
        "https://example.prox:90",
        "https://example.prox:9050",
        // ... array of 10 proxy
    ];
    let responses: Vec<reqwest::Result<reqwest::Response>> =
        futures::future::join_all(proxy.iter().map(|&proxy| async move {
            let client = reqwest::Client::builder()
                .proxy(reqwest::Proxy::all(proxy)?)
                .build()?;

            let url = "http://httpbin.org/ip";

            client.get(url).send().await
        }))
        .await;

    Ok(())
}
    • 注意:**这不是 * 并行 * 执行请求,而是 * 并发 * 执行请求,但这对您来说可能无关紧要。

相关问题