问题描述
过去几天,我主要在尝试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
解决方法
最新的reqwest
默认为async
,因此在您的示例中,res
是未来,而不是实际的响应。您需要await
响应或使用reqwest
的阻止API。
异步/等待
在您的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"] }
现在您可以使用Client
模块中的reqwest::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()
);
}