我想获得本地/远程
SockAddr
一对成功的reqwest http连接。
我曾经写过以下代码。
#[tokio::main]
async fn main() -> Result<(), anyhow::Error> {
let response = reqwest::Client::new()
.get("https://example.com/")
.send()
.await?
.error_for_status()?;
let http_info = response
.extensions()
.get::<hyper::client::connect::HttpInfo>()
.ok_or(anyhow::anyhow!("failed to collect socket addresses"))?;
println!("sock_local_addr: {}", http_info.local_addr());
println!("sock_remote_addr: {}", http_info.remote_addr());
println!("response text: {}", response.text().await?);
Ok(())
}
对于旧的reqwest和hyper(reqwest==0.11,hyper==0.14),效果很好。
但是最新的 hyper 没有
hyper::client::connect::HttpInfo
,并且 reqwest 0.11 有点陈旧。
在最新的 reqwest 版本中是否有任何正确的方法来获取本地/远程套接字地址?
如果要求 0.12,
response
.extensions()
.get::<hyper::client::connect::HttpInfo>()
不返回
Some::<HttpInfo>
,而是返回None
(无法获取SocketAddr)。
如 Hyper 的 从 v0.14 升级到 v1 指南中所述:
Client
更高级别的池化
已从hyper 1.0中删除。类似的类型被添加到Client
,称为hyper-util
。这主要是一个直接替代品。client::legacy::Client
hyper_util::client::legacy::connect::HttpInfo
。