Код статуса ответа в Rust
Сервер возвращает не только тело, но и числовой код состояния. По нему видно, нашлась ли страница, принят ли запрос или хост отказал. Сбой сети смотрят отдельно: код появляется только когда объект ответа уже получен.
Успешная выдача часто помечена числом двести. Коды четыреста и пятьсот говорят об ошибке на стороне клиента или сервера. Крейт не считает такой ответ сетевым сбоем: тело можно читать, но смысл данных нужно проверять по коду.
Спросим код у учебного хоста:
#[tokio::main]
async fn main() {
let client = reqwest::Client::new();
let url = "https://example.com";
match client.get(url).send().await {
Ok(resp) => {
println!("{}", resp.status().as_u16());
if let Err(e) = resp.text().await {
println!("{}", e);
}
}
Err(e) => println!("{}", e),
}
}
На экране часто 200, если хост ответил.
Метод на объекте ответа дает тип с кодом;
число для ветвления берут через преобразование
к беззнаковому целому.
Запросим путь, которого на хосте может не быть:
#[tokio::main]
async fn main() {
let client = reqwest::Client::new();
let url = "https://example.com/missing-page";
match client.get(url).send().await {
Ok(resp) => println!("{}", resp.status().as_u16()),
Err(e) => println!("{}", e),
}
}
Дан адрес:
https://example.com
Выполните запрос, выведите числовой код ответа и при необходимости текст ошибки сети.
Дан фрагмент:
match client.get(url).send().await {
Ok(resp) => {
let code = resp.status().as_u16();
if code != 200 {
println!("bad");
}
}
Err(e) => println!("{}", e),
}
Скажите, при каком числе в code
напечатается bad, если сервер
вернул ответ с кодом четыреста четыре.
Скажите, можно ли прочитать код ответа, если переменная с исходом отправки попала в ветку с ошибкой сети.