Rust reqwest:如何获取本地和远程SockAddr?

问题描述 投票:0回答:1

我想获得本地/远程

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)。

rust reqwest
1个回答
1
投票

如 Hyper 的 从 v0.14 升级到 v1 指南中所述:

Client

更高级别的池化

Client
已从hyper 1.0中删除。类似的类型被添加到
hyper-util
,称为
client::legacy::Client
。这主要是一个直接替代品。

您也会在那里找到

hyper_util::client::legacy::connect::HttpInfo

© www.soinside.com 2019 - 2024. All rights reserved.