#rust #reqwest
#Ржавчина #reqwest
Вопрос:
В течение последних нескольких дней я в основном экспериментировал с модулем reqwest, чтобы посмотреть, чего я могу достичь, но я столкнулся с определенной проблемой, которую я не смог решить. Я пытаюсь получить значение заголовков ответа после выполнения запроса post. Код, в котором я пытался, является
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
Ответ №1:
Последнее значение по умолчанию 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()
);
}