4

在过去的几天里,我主要是在试验 reqwest 模块,看看我能完成什么,但我遇到了一个我无法解决的问题。我尝试在执行发布请求后检索响应标头值。我尝试的代码是

extern crate reqwest;

fn main() {
   let client = reqwest::Client::new();
   let res = client
    .post("https://google.com")
    .header("testerheader", "test")
    .send();
   println!("Headers:\n{:#?}", res.headers().get("content-length").unwrap());
}

此代码似乎返回此错误

error[E0599]: no method named `headers` found for opaque type `impl std::future::Future` in the current scope
4

1 回答 1

1

默认情况下是最新的,因此在您的示例reqwest中是未来,而不是实际响应。您需要响应或使用阻塞 API。asyncresawaitreqwest

异步/等待

在您的 Cargo.toml 添加tokio为依赖项。

[dependencies]
tokio = { version = "0.2.22", features = ["full"] }
reqwest = "0.10.8"

用作tokio异步运行时和await响应。

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = reqwest::Client::new();
    let res = client
        .post("https://google.com")
        .header("testerheader", "test")
        .send()
        .await?;
    println!(
        "Headers:\n{:#?}",
        res.headers().get("content-length").unwrap()
    );
    Ok(())
}

阻塞 API

在您的 Cargo.toml 中启用该blocking功能。

[dependencies]
reqwest = { version = "0.10.8", features = ["blocking"] }

现在您可以使用Clientfromreqwest::blocking模块。

fn main() {
    let client = reqwest::blocking::Client::new();
    let res = client
        .post("https://google.com")
        .header("testerheader", "test")
        .send()
        .unwrap();
    println!(
        "Headers:\n{:#?}",
        res.headers().get("content-length").unwrap()
    );
}
于 2020-09-13T15:54:03.923 回答