这不是很明显,但是如果您指定 local_address 选项,连接将使用该 IP 地址发送请求。
我现在使用Reqwest(示例中为v0.11.1)。
use std::net::IpAddr;
use std::{collections::HashMap, str::FromStr};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::builder()
.local_address(IpAddr::from_str("2001:0db8:85a3:0000:0000:8a2e:0370:7334")?)
.build()?;
let resp = client
.get("https://httpbin.org/ip")
.send()
.await?
.json::<HashMap<String, String>>()
.await?;
println!("{:#?}", resp);
Ok(())
}
这也适用,但我现在更喜欢reqwest。
幸运的是,我找到了一个名为 isahc 的 HTTP 库,我可以指定 IP 版本。
use isahc::{config::IpVersion, prelude::*, HttpClient};
HttpClient::builder()
.ip_version(IpVersion::V6)
Isahc 的isahc::HttpClientBuilder 结构有ip_version 方法,您可以指定IP 版本。 (see)
use isahc::{config::IpVersion, prelude::*, HttpClient};
use std::{
io::{copy, stdout},
time::Duration,
};
fn main() -> Result<(), isahc::Error> {
let client = HttpClient::builder()
.timeout(Duration::from_secs(5))
.ip_version(IpVersion::V6)
.build()?;
let mut response = client.get("some url")?;
copy(response.body_mut(), &mut stdout())?;
Ok(())
}