HTTP е невероятно популярен метод за комуникация с отдалечени сървъри. Използвайте тази отлична библиотека на Rust, за да опростите процеса.

Както повечето езици за програмиране, можете да използвате Rust за изпращане и получаване на данни през HTTP. Когато изграждате уеб базирана услуга, често ще трябва да интегрирате една или повече услуги. Често ще го правите, като им изпращате HTTP заявки.

Rust има вградена функционалност за HTTP операции. В екосистемата на Rust има и много библиотеки, които ви помагат да взаимодействате с HTTP и да изграждате HTTP услуги.

Правене на HTTP заявки с Rust

Няколко библиотеки на Rust са налични за правене на HTTP заявки, включително Reqwest, Хипер, и Сърфирайте библиотеки. Reqwest е най-популярният сред разработчиците на Rust.

Reqwest е клиентска библиотека от високо ниво, която предоставя прост и удобен API за правене на HTTP заявки. Reqwest предоставя функционалност за изпращане на заявки и обработка на отговори и грешки. Той абстрахира много подробности зад извършването на HTTP заявка и поддържа разширени функции като асинхронни заявки, използващи

instagram viewer
токио време на изпълнение. Той също така обработва JSON десериализация, HTTP заглавки, изчакване на връзката и SSL настройки.

Ще намерите библиотеката Reqwest удобна, ако не сте запознати с Rust или нямате опит с HTTP услугите.

За да започнете с Reqwest, добавете Reqwest и Токио библиотеки към зависимостите на вашия проект. Tokio е асинхронна библиотека за изпълнение, която взаимодейства с Reqwest. Можете да добавите тези зависимости към вашите Cargo.toml файл след създаване на проект Rust.

[зависимости]
токио = { версия = "1.15", характеристики = ["пълен"] }
reqwest = { версия = "0.11", характеристики = ["json"] }

След като добавите библиотеките Reqwest и Tokio към зависимостите на вашия проект, Cargo ще ги инсталира, когато създавате вашата програма.

HTTP GET заявки с Reqwest

Ще правите GET заявки за извличане на данни от уеб сървър. GET заявките могат да извличат HTML страници, JSON данни или двоични файлове като изображения или видеоклипове.

Reqwest ви позволява да посочите крайната точка на URL като низ заедно с параметри на заявката и заглавки за заявката.

Ето как можете да изпратите HTTP GET заявка до URL:

използване reqwest:: Грешка;

асинхроненfnget_request() -> Резултат {
позволявам отговор = reqwest:: get(" https://www.example.com").изчакайте?;
println!(„Състояние: {}“, response.status());

позволявам тяло = response.text().изчакайте?;
println!(„Тяло:\n{}“, тяло);

Добре(())
}

#[tokio:: main]
асинхроненfnосновен() -> Резултат {
get_request().изчакайте?;
Добре(())
}

Този код дефинира асинхронна функция, get_request, за да отпечатате подробности за отговора от заявка до example.com. Извиква reqwest модули получавам метод и отпечатва код на състоянието на отговора и тялото.

Ето резултата от извикването на get_request функция от основен функция:

Обработка на HTTP грешки с Reqwest

Ще трябва да обработвате грешки от HTTP заявки, когато възникнат. Библиотеката Reqwest предоставя Грешка тип, който можете да използвате за обработка на грешки. Освен това HTTP кодовете за състояние от уеб сървъра могат да предоставят информация за състоянието на заявката.

Ето как можете да обработвате HTTP грешки за вашите заявки с Reqwest:

използване reqwest:: Грешка;

асинхроненfnhandle_error() -> Резултат {
позволявам отговор = reqwest:: get(" https://www.example.com").изчакайте?;

съвпада response.status().as_u16() {
200..=299 => {
позволявам тяло = response.text().изчакайте?;
println!(„Успех! Тяло:\n{}", тяло);
}
400..=599 => {
позволявам статус = response.status();
позволявам грешка_съобщение = отговор.текст().изчакайте?;
println!(„Грешка {}: {}“, състояние, съобщение_за_грешка);
}
_ => {
println!(„Неочакван код на състояние: {}“, response.status());
}
}

Добре(())
}

#[tokio:: main]
асинхроненfnосновен() -> Резултат {
handle_error().изчакайте?;
Добре(())
}

The handle_error функция прави GET заявка към example.com, а операторът за съвпадение обработва всички грешки въз основа на кода на състоянието на отговора.

Функцията отпечатва съобщение и кода на състоянието в зависимост от отговора към сървъра.

Изпращане на HTTP POST заявки с Reqwest

Ще правите HTTP POST заявки за изпращане на данни към сървър. Можете да направите това с помощта на reqwest:: Клиент структура, която създава клиент и използва reqwest:: RequestBuilder структура за изграждане на заявката.

Ето как можете да направите POST заявка до Крайна точка на POST заявка на HTTPbin с Reqwest:

използване reqwest::{Клиент, Грешка};

асинхроненfnпостни го() -> Резултат {
позволявам url = " https://httpbin.org/post";
позволявам json_data = r#"{"name": "Джон Доу", "имейл": "[email protected]"}"#;

позволявам клиент = reqwest:: Клиент:: нов ();

позволявам отговор = клиент
.post (url)
.header("Тип съдържание", "приложение/json")
.body (json_data.to_owned())
.send()
.изчакайте?;

println!(„Състояние: {}“, response.status());

позволявам тяло_на_отговора = response.text().изчакайте?;
println!(„Тяло на отговора:\n{}“, тяло_на_отговор);

Добре(())
}

#[tokio:: main]
асинхроненfnосновен() -> Резултат {
постни го().изчакайте?;
Добре(())
}

The json_данни променлива дефинира JSON данните за заявката и клиент променливата е a reqwest:: Клиент екземпляр за POST заявката.

The отговор променливата е конструктор на POST заявки. The пост методът изпраща POST заявката до URL адреса и заглавка метод задава HTTP заглавка. The тяло метод задава тялото на заявката и изпрати метод изпраща заявката.

The постни го функцията отпечатва кода на състоянието на отговора и тялото на конзолата с помощта на println! макро:

Обработване на заглавки и параметри на заявка Вашите HTTP заявки

Обработката на заглавки и параметри на заявката е важен аспект от правенето на HTTP заявки. Заглавките съдържат допълнителна информация като идентификационни данни за удостоверяване или метаданни за исканото съдържание.

Ще използвате параметри на заявката, за да добавите допълнителна информация към URL адрес, за да може сървърът да филтрира или модифицира отговор.

Обработката на заглавки и параметри на заявката следва подобен процес на изпращане на заявки за публикуване. Ето как можете да обработвате заглавки и параметри на заявки във вашите HTTP заявки с Reqwest:

използване std:: колекции:: HashMap;
използване reqwest::{ Грешка, заглавка};

#[tokio:: main]
асинхроненfnосновен() -> Резултат {
заглавия_за_заявки().изчакайте?;
Добре(())
}

асинхроненfnзаглавки_за_заявки() -> Резултат {
// Настройте URL адреса и заглавките за заявката
позволявам url = " https://example.com/api";
позволяваммут заглавия = заглавие:: HeaderMap:: ново ();
headers.insert (заглавие:: USER_AGENT, заглавие:: HeaderValue:: from_static("reqwest"));
headers.insert (заглавие:: CONTENT_TYPE, заглавие:: HeaderValue:: from_static("приложение/json"));

// Настройване на параметрите на заявката за заявката
позволяваммут параметри = HashMap:: new();
params.insert("фу", "бар");
params.insert("баз", "qux");

// Направете заявката
позволявам отговор = reqwest:: клиент:: нов ()
.get (url)
.headers (заглавки)
.query(&params)
.send()
.изчакайте?;

// Обработка на отговора
println!("{:#?}", отговор);

Добре(())
}

Ще създадете hashmap за параметрите на заявката, които след това предавате на заявка метод. Създайте екземпляр на заглавка:: HeaderMap въведете, за да добавите заглавки.

The заглавки_за_заявки функция изпраща GET заявка до example.com с множество заглавки и параметри на заявката. Той използва заглавки и заявка методи, които вземат карти, съдържащи съответно заглавките и параметрите на заявката.

Можете да изградите Full Stack WebApp в Rust с WASM

Правенето на HTTP заявки е умение, което е удобно за изграждане на сложни приложения, които интегрират функционалност от други приложения.

Можете да създавате уеб приложения с пълен стек в Rust с библиотеки като Percy, Yew и Sycamore, които абстрахират сложността за отлично изживяване при разработката.