Заголовки запроса в Rust
Кроме адреса запрос несет заголовки: короткие пары имя и значение. Их задают в цепочке до отправки. Заголовки ответа читают из объекта ответа после успешной отправки.
Один объект клиента можно переиспользовать для многих запросов. Заголовок на отдельном запросе не меняет настройки клиента для следующих обращений.
Попросим ответ в виде простого текста:
#[tokio::main]
async fn main() {
let client = reqwest::Client::new();
let url = "https://example.com";
match client
.get(url)
.header("accept", "text/plain")
.send()
.await
{
Ok(resp) => {
match resp.headers().get("content-type") {
Some(v) => match v.to_str() {
Ok(s) => println!("{}", s),
Err(_) => println!("bad header"),
},
None => println!("no type"),
}
if let Err(e) = resp.text().await {
println!("{}", e);
}
}
Err(e) => println!("{}", e),
}
}
Имя заголовка в запросе пишут строчными буквами, как принято в примерах крейта. Чтение ответа возвращает опциональное значение: если заголовка нет, ветка не сработает.
Передадим метку клиента в заголовке:
#[tokio::main]
async fn main() {
let client = reqwest::Client::new();
let url = "https://example.com";
match client
.get(url)
.header("user-agent", "lesson/1")
.send()
.await
{
Ok(resp) => println!("{}", resp.status().as_u16()),
Err(e) => println!("{}", e),
}
}
Дан адрес:
https://example.com
Задайте заголовок accept со
значением text/plain, выполните
запрос и выведите числовой код ответа.
Скажите, где в объекте ответа искать
заголовок content-type после
успешной отправки.
Дан адрес:
https://example.com
Добавьте заголовок x-request-id
со значением demo, прочитайте
тип содержимого из ответа и выведите
его текст или сообщение, что заголовка
нет.