HTTP — невероятно популярный метод для связи с удаленными серверами. Используйте эту прекрасную библиотеку Rust, чтобы упростить процесс.
Как и большинство языков программирования, вы можете использовать Rust для отправки и получения данных по HTTP. Когда вы создаете веб-сервис, вам часто нужно интегрировать один или несколько сервисов. Вы часто делаете это, отправляя им HTTP-запросы.
Rust имеет встроенную функциональность для HTTP-операций. В экосистеме Rust также есть множество библиотек, которые помогают вам взаимодействовать с HTTP и создавать HTTP-сервисы.
Выполнение HTTP-запросов с помощью Rust
Для создания HTTP-запросов доступно несколько библиотек Rust, в том числе Запрос, Гипер, и Серфинг библиотеки. Reqwest — самый популярный среди разработчиков Rust.
Reqwest — это клиентская библиотека высокого уровня, предоставляющая простой и удобный API для выполнения HTTP-запросов. Reqwest предоставляет функциональные возможности для отправки запросов и обработки ответов и ошибок. Он абстрагируется от многих деталей выполнения HTTP-запроса и поддерживает расширенные функции, такие как асинхронные запросы с использованием
Токио время выполнения. Он также обрабатывает десериализацию JSON, заголовки HTTP, время ожидания соединения и настройки SSL.Вам пригодится библиотека Reqwest, если вы новичок в Rust или не имеете опыта работы с HTTP-сервисами.
Чтобы начать с Reqwest, добавьте Reqwest и Токио библиотеки для зависимостей вашего проекта. Tokio — это асинхронная библиотека времени выполнения, которая взаимодействует с Reqwest. Вы можете добавить эти зависимости в свой Груз.томл файл после создания проекта Rust.
[зависимости]
Токио = {версия = "1.15", функции = ["полный"] }
запрос = {версия = "0.11", функции = ["жсон"] }
Как только вы добавите библиотеки Reqwest и Tokio в зависимости вашего проекта, Cargo установит их при сборке вашей программы.
HTTP-запросы GET с Reqwest
Вы будете делать запросы GET для получения данных с веб-сервера. Запросы GET могут извлекать HTML-страницы, данные JSON или двоичные файлы, такие как изображения или видео.
Reqwest позволяет указать конечную точку URL-адреса в виде строки вместе с параметрами и заголовками запроса.
Вот как вы можете отправить HTTP-запрос GET на URL-адрес:
использовать Запрос:: Ошибка;
асинхронныйфнget_request() -> Результат {
позволять ответ = запрос:: получить (" https://www.example.com").Ждите?;
распечатать!("Положение дел: {}", ответ.статус());позволять тело = ответ.текст().Ждите?;
распечатать!("Тело:\n{}", тело);Хорошо(())
}
#[Токио:: основной]
асинхронныйфносновной() -> Результат {
получить_запрос().Ждите?;
Хорошо(())
}
Этот код определяет асинхронную функцию, get_request, чтобы распечатать детали ответа из запроса на example.com. Он называет запрос модуль получать метод и печатает код состояния ответа и тело.
Вот результат вызова get_request функцию от основной функция:
Обработка ошибок HTTP с помощью Reqwest
Вам нужно будет обрабатывать ошибки HTTP-запросов, когда они возникают. Библиотека Reqwest предоставляет Ошибка тип, который вы можете использовать для обработки ошибок. Кроме того, коды состояния HTTP с веб-сервера могут предоставить информацию о состоянии запроса.
Вот как вы можете обрабатывать ошибки HTTP для своих запросов с помощью Reqwest:
использовать Запрос:: Ошибка;
асинхронныйфнhandle_error() -> Результат {
позволять ответ = запрос:: получить (" https://www.example.com").Ждите?;соответствовать ответ.статус().as_u16() {
200..=299 => {
позволять тело = ответ.текст().Ждите?;
распечатать!("Успех! Тело:\n{}", тело);
}
400..=599 => {
позволять статус = ответ.статус();
позволять error_message = ответ.текст().Ждите?;
распечатать!("Ошибка {}: {}", статус, error_message);
}
_ => {
распечатать!("Неожиданный код состояния: {}", ответ.статус());
}
}Хорошо(())
}
#[Токио:: основной]
асинхронныйфносновной() -> Результат {
обработчик_ошибки().Ждите?;
Хорошо(())
}
handle_error функция делает запрос GET к пример.com, а оператор match обрабатывает любые ошибки на основе кода состояния ответа.
Функция печатает сообщение и код состояния в зависимости от ответа сервера.
Отправка запросов HTTP POST с помощью Reqwest
Вы будете делать запросы HTTP POST для отправки данных на сервер. Вы можете сделать это с помощью запрос:: Клиент структура, которая создает клиента и использует запрос:: RequestBuilder структура для создания запроса.
Вот как вы можете сделать POST-запрос на Конечная точка POST-запроса HTTPbin с Реквест:
использовать reqwest::{Клиент, Ошибка};
асинхронныйфнpost_it() -> Результат {
позволять URL = " https://httpbin.org/post";
позволять json_data = r#"{"name": "Джон Доу", "email": "[email protected]"}"#;позволять client = reqwest:: Client:: new();
позволять ответ = клиент
.post (ссылка)
.заголовок("Тип содержимого", "приложение/json")
.тело (json_data.to_owned())
.отправлять()
.Ждите?;распечатать!("Положение дел: {}", ответ.статус());
позволять тело_ответа = ответ.текст().Ждите?;
распечатать!("Тело ответа:\n{}", тело_ответа);Хорошо(())
}
#[Токио:: основной]
асинхронныйфносновной() -> Результат {
пост_ит().Ждите?;
Хорошо(())
}
json_data переменная определяет данные JSON для запроса, а клиент переменная - это запрос:: Клиент экземпляр для POST-запроса.
ответ переменная — это построитель POST-запросов. почта метод отправляет запрос POST на URL-адрес, а заголовок Метод устанавливает заголовок HTTP. тело метод задает тело запроса, а отправлять метод отправляет запрос.
post_it Функция выводит код состояния и тело ответа на консоль с помощью распечатать! макрос:
Обработка заголовков и параметров запросов ваших HTTP-запросов
Обработка заголовков и параметров запроса — важный аспект создания HTTP-запросов. Заголовки содержат дополнительную информацию, такую как учетные данные для аутентификации или метаданные о запрошенном содержимом.
Вы будете использовать параметры запроса, чтобы добавить дополнительную информацию к URL-адресу, чтобы сервер мог фильтровать или изменять ответ.
Обработка заголовков и параметров запроса аналогична процессу отправки почтовых запросов. Вот как вы можете обрабатывать заголовки и параметры запросов в своих HTTP-запросах с помощью Reqwest:
использовать std:: collections:: HashMap;
использовать reqwest::{ Ошибка, заголовок};#[Токио:: основной]
асинхронныйфносновной() -> Результат {
заголовки_для_запросов().Ждите?;
Хорошо(())
}асинхронныйфнзаголовки_для_запросов() -> Результат {
// Настраиваем URL и заголовки для запроса
позволять URL = " https://example.com/api";
позволятьмут заголовки = заголовок:: HeaderMap:: новый();
headers.insert (header:: USER_AGENT, header:: HeaderValue:: from_static("запрос"));
headers.insert (header:: CONTENT_TYPE, header:: HeaderValue:: from_static("приложение/json"));// Настраиваем параметры запроса для запроса
позволятьмут params = HashMap:: new();
параметры.вставить("фу", "бар");
параметры.вставить("баз", "кукс");// Делаем запрос
позволять ответ = запрос:: Клиент:: новый ()
.получить (ссылка)
.headers (заголовки)
.запрос(и параметры)
.отправлять()
.Ждите?;// Обработка ответа
распечатать!("{:#?}", ответ);
Хорошо(())
}
Вы создадите хэш-карту для параметров запроса, которые затем передадите в запрос метод. Создайте экземпляр заголовок:: HeaderMap введите, чтобы добавить заголовки.
заголовки_для_запросов функция отправляет запрос GET на пример.com с несколькими заголовками и параметрами запроса. Он использует заголовки и запрос методы, которые принимают карты, содержащие заголовки и параметры запроса соответственно.
Вы можете создать полнофункциональное веб-приложение на Rust с помощью WASM
Выполнение HTTP-запросов — это навык, который удобен для создания сложных приложений, интегрирующих функциональные возможности других приложений.
Вы можете создавать полноценные веб-приложения на Rust с такими библиотеками, как Percy, Yew и Sycamore, которые абстрагируются от сложностей для отличного опыта разработки.