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, которые абстрагируются от сложностей для отличного опыта разработки.