Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpHtGt 242 of 288 menu
◀ ▶

Запрос по адресу в Rust

Запрос по известному адресу начинается с объекта клиента. Цепочка от адреса до отправки возвращает ответ или ошибку сети: сбой может случиться до того, как сервер что-то пришлет.

Тело ответа читают отдельным шагом после успешной отправки. Оба шага асинхронные, поэтому главная функция помечена атрибутом исполнителя и ждет результат через точку ожидания.

Создайте проект Cargo и из его корня выполните команду добавления крейта для HTTP с поддержкой JSON:

cargo add reqwest --features json

Исполнитель tokio к проекту уже подключали командой cargo add tokio --features macros,rt-multi-thread,time в разделе про асинхронность. Без него точки ожидания в главной функции не соберутся.

Запросим учебный хост и выведем длину текста ответа:

#[tokio::main] async fn main() { let client = reqwest::Client::new(); let url = "https://example.com"; match client.get(url).send().await { Ok(resp) => match resp.text().await { Ok(body) => println!("{}", body.len()), Err(e) => println!("{}", e), }, Err(e) => println!("{}", e), } }

На экране число байт в теле, если хост доступен. Сеть или DNS могут дать сбой, и тогда сработает ветка с текстом ошибки.

Тот же прием удобнее вынести в функцию с исходом сбоя крейта:

async fn load_len(client: &reqwest::Client, url: &str) -> Result<usize, reqwest::Error> { let resp = client.get(url).send().await?; let body = resp.text().await?; Ok(body.len()) } #[tokio::main] async fn main() { let client = reqwest::Client::new(); let url = "https://example.com"; match load_len(&client, url).await { Ok(n) => println!("{}", n), Err(e) => println!("{}", e), } }

Дан адрес:

https://example.com

Создайте клиент, выполните запрос по этой строке, прочитайте тело ответа и выведите его длину. Сбой сети разберите через сопоставление и напечатайте текст ошибки.

Скажите, на каком шаге появляется ошибка крейта, если имя хоста в адресе не находится: при отправке или при чтении тела.

Дан адрес:

https://example.com

Запишите асинхронную функцию с исходом сбоя библиотеки, которая возвращает первые тридцать символов текста ответа или сообщение об ошибке. Вызовите ее из главной функции с атрибутом исполнителя.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить