3

Il には多くのプロキシ uri (http および socks5) があり、reqwest を使用して、これらのプロキシを介して http 要求を送信しています。プロキシが機能しない場合は、プロキシを削除したいと考えています。

for proxy in proxies {
    let proxy = match Proxy::all(proxy_url) {
        Ok(proxy) => proxy,
        Err(e) => {
            eprintln!("creating proxy failed! {:?}", e);
            continue;
        }
    };

    let client = match Client::builder()
    .proxy(proxy)
    .build()

    let client = match client {
        Ok(client) => client,
        Err(e) => {
            eprintln!("building client failed! {:?}", e);
            continue;
        }
    }

    loop {
        match client.get(&config.endpoint).send().await {
            Ok(_) => {}
            Err(e) => {
                if e.is_proxy_error() { // this method doesn't exist
                    eprintln!("Dropping proxy...");
                    break;
                } else {
                    eprintln!("client error! {:?}", e);
                }
            }
        }
    }
}

そして、私は多くの種類のものを手に入れましたReqwest::Error

reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Invalid response version") }
reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Proxy server unreachable") }
reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Connection refused") }
reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Connection reset by peer (os error 104)") }

ほとんどの場合、エラーメッセージは明示的ですが、それぞれを異なる方法で処理するにはどうすればよいですか? reqwest::Errorプライベートなhaveinnerフィールドなので、彼にアクセスできません。そして、のソースを取得した場合、のreqwest::ErrorようBox<syn Error>に扱うことができないhyper::Error

4

1 に答える 1