HTTP to niezwykle popularna metoda komunikacji ze zdalnymi serwerami. Skorzystaj z tej doskonałej biblioteki Rusta, aby uprościć ten proces.

Podobnie jak większość języków programowania, możesz używać Rusta do wysyłania i odbierania danych przez HTTP. Tworząc usługę internetową, często będziesz musiał zintegrować jedną lub więcej usług. Często będziesz to robić, wysyłając im żądania HTTP.

Rust ma wbudowaną funkcjonalność dla operacji HTTP. Istnieje również wiele bibliotek w ekosystemie Rust, które pomagają w interakcji z HTTP i budowaniu usług HTTP.

Wykonywanie żądań HTTP za pomocą Rust

Dostępnych jest kilka bibliotek Rust do wysyłania żądań HTTP, w tym Żądaj zachodu, hiper, I Surfować biblioteki. Reqwest jest najpopularniejszym wśród programistów Rusta.

Reqwest to biblioteka klienta wysokiego poziomu, która zapewnia prosty i wygodny interfejs API do wykonywania żądań HTTP. Reqwest zapewnia funkcjonalność wysyłania żądań oraz obsługi odpowiedzi i błędów. Abstrahuje wiele szczegółów związanych z tworzeniem żądania HTTP i obsługuje zaawansowane funkcje, takie jak żądania asynchroniczne przy użyciu

instagram viewer
Tokio czas działania. Obsługuje również deserializację JSON, nagłówki HTTP, limity czasu połączenia i ustawienia SSL.

Biblioteka Reqwest przyda się, jeśli jesteś nowy w Rust lub nie masz doświadczenia z usługami HTTP.

Aby rozpocząć od Reqwest, dodaj Reqwest i Tokio biblioteki do zależności twojego projektu. Tokio to asynchroniczna biblioteka uruchomieniowa współpracująca z Reqwest. Możesz dodać te zależności do swojego Cargo.toml plik po utworzeniu projektu Rust.

[zależności]
Tokio = { wersja = "1.15", funkcje = ["pełny"] }
prośba = { wersja = "0.11", funkcje = ["json"] }

Gdy dodasz biblioteki Reqwest i Tokio do zależności swojego projektu, Cargo zainstaluje je podczas tworzenia programu.

Żądania HTTP GET z Reqwest

Będziesz wysyłać żądania GET w celu pobrania danych z serwera WWW. Żądania GET mogą pobierać strony HTML, dane JSON lub pliki binarne, takie jak obrazy lub filmy.

Reqwest pozwala określić punkt końcowy adresu URL jako ciąg znaków wraz z parametrami zapytania i nagłówkami żądania.

Oto jak możesz wysłać żądanie HTTP GET na adres URL:

używać żądaj:: Błąd;

asynchronicznyfnget_request() -> Wynik {
pozwalać odpowiedź = żądanie:: pobierz(" https://www.example.com").czekać na?;
drukuj!(„Stan: {}”, odpowiedź.status());

pozwalać treść = odpowiedź.tekst().czekać na?;
drukuj!("Treść:\n{}", ciało);

OK(())
}

#[tokio:: główny]
asynchronicznyfngłówny() -> Wynik {
get_request().czekać na?;
OK(())
}

Ten kod definiuje funkcję asynchroniczną, get_request, aby wydrukować szczegóły odpowiedzi z żądania do example.com. Nazywa się prośba modułu Dostawać metoda i drukuje kod statusu odpowiedzi I ciała.

Oto wynik wywołania metody get_request funkcja od główny funkcjonować:

Obsługa błędów HTTP za pomocą Reqwest

Będziesz musiał obsłużyć błędy z żądań HTTP, gdy się pojawią. Biblioteka Reqwest zapewnia Błąd typ, którego można użyć do obsługi błędów. Ponadto kody stanu HTTP z serwera WWW mogą dostarczać informacji o stanie żądania.

Oto jak możesz obsłużyć błędy HTTP dla swoich żądań za pomocą Reqwest:

używać żądaj:: Błąd;

asynchronicznyfnuchwyt_błąd() -> Wynik {
pozwalać odpowiedź = żądanie:: pobierz(" https://www.example.com").czekać na?;

mecz odpowiedź.status().as_u16() {
200..=299 => {
pozwalać treść = odpowiedź.tekst().czekać na?;
drukuj!("Powodzenie! Treść:\n{}", ciało);
}
400..=599 => {
pozwalać status = odpowiedź.status();
pozwalać wiadomość_o_błędzie = odpowiedź.tekst().czekać na?;
drukuj!("Błąd {}: {}", status, komunikat o błędzie);
}
_ => {
drukuj!(„Nieoczekiwany kod stanu: {}”, odpowiedź.status());
}
}

OK(())
}

#[tokio:: główny]
asynchronicznyfngłówny() -> Wynik {
uchwyt_błąd().czekać na?;
OK(())
}

The uchwyt_błąd funkcja wysyła żądanie GET do przyklad.com, a instrukcja dopasowania obsługuje wszelkie błędy na podstawie kodu stanu odpowiedzi.

Funkcja drukuje komunikat i kod statusu w zależności od odpowiedzi serwera.

Wysyłanie żądań HTTP POST za pomocą Reqwest

Będziesz wysyłać żądania HTTP POST w celu przesłania danych na serwer. Możesz to zrobić za pomocą reqwest:: Klient struct, która tworzy klienta i użyj reqwest:: RequestBuilder struct do zbudowania żądania.

Oto jak możesz wysłać żądanie POST do Punkt końcowy żądania POST HTTPbin z Reqwestem:

używać reqwest::{Klient, błąd};

asynchronicznyfnpost_it() -> Wynik {
pozwalać adres URL = " https://httpbin.org/post";
pozwalać json_data = r#"{"imię": "John Doe", "email": "[email protected]"}"#;

pozwalać klient = reqwest:: Klient:: nowy();

pozwalać odpowiedź = klient
.post (url)
.nagłówek("Typ zawartości", "aplikacja/json")
.body (json_data.to_owned())
.wysłać()
.czekać na?;

drukuj!(„Stan: {}”, odpowiedź.status());

pozwalać treść_odpowiedzi = odpowiedź.tekst().czekać na?;
drukuj!("Treść odpowiedzi:\n{}", treść_odpowiedzi);

OK(())
}

#[tokio:: główny]
asynchronicznyfngłówny() -> Wynik {
post_it().czekać na?;
OK(())
}

The json_data zmienna definiuje dane JSON dla żądania, a zmienna klient zmienna to a reqwest:: Klient instancja dla żądania POST.

The odpowiedź zmienna jest konstruktorem żądań POST. The post Metoda wysyła żądanie POST do adresu URL, a metoda nagłówek Metoda ustawia nagłówek HTTP. The ciało Metoda ustawia treść żądania, a wysłać metoda wysyła żądanie.

The post_it funkcja drukuje kod stanu odpowiedzi i treść do konsoli za pomocą drukuj! makro:

Obsługa nagłówków i parametrów zapytania Twoje żądania HTTP

Obsługa nagłówków i parametrów zapytań jest ważnym aspektem tworzenia żądań HTTP. Nagłówki zawierają dodatkowe informacje, takie jak dane uwierzytelniające lub metadane dotyczące żądanej treści.

Użyjesz parametrów zapytania, aby dodać dodatkowe informacje do adresu URL, aby serwer mógł przefiltrować lub zmodyfikować odpowiedź.

Obsługa nagłówków i parametrów zapytań jest podobna do procesu wysyłania żądań wysyłania wiadomości. Oto jak możesz obsługiwać nagłówki i parametry zapytań w żądaniach HTTP za pomocą Reqwest:

używać std:: kolekcje:: HashMap;
używać reqwest::{Błąd, nagłówek};

#[tokio:: główny]
asynchronicznyfngłówny() -> Wynik {
headers_for_requests().czekać na?;
OK(())
}

asynchronicznyfnheaders_for_requests() -> Wynik {
// Skonfiguruj adres URL i nagłówki żądania
pozwalać adres URL = " https://example.com/api";
pozwalaćmut headers = header:: HeaderMap:: new();
headers.insert (header:: USER_AGENT, header:: HeaderValue:: from_static(„żądanie”));
headers.insert (header:: CONTENT_TYPE, header:: HeaderValue:: from_static("aplikacja/json"));

// Skonfiguruj parametry zapytania dla żądania
pozwalaćmut params = HashMap:: nowy();
parametry.wstaw("bla", "bar");
parametry.wstaw("baz", "qux");

// Złóż wniosek
pozwalać odpowiedź = reqwest:: Klient:: nowy()
.get (url)
.nagłówki (nagłówki)
.zapytanie(&parametry)
.wysłać()
.czekać na?;

// Obsługa odpowiedzi
drukuj!("{:#?}", odpowiedź);

OK(())
}

Utworzysz mapę mieszania dla parametrów zapytania, które następnie przekażesz do zapytanie metoda. Utwórz instancję nagłówek:: Mapa nagłówków wpisz, aby dodać nagłówki.

The headers_for_requests funkcja wysyła żądanie GET do przyklad.com z wieloma nagłówkami i parametrami zapytania. Używa nagłówki I zapytanie metody, które pobierają mapy zawierające odpowiednio nagłówki i parametry zapytania.

Możesz zbudować pełną aplikację internetową w Rust za pomocą WASM

Wykonywanie żądań HTTP to umiejętność przydatna przy tworzeniu zaawansowanych aplikacji, które integrują funkcje innych aplikacji.

Możesz tworzyć pełne aplikacje internetowe w Rust z bibliotekami takimi jak Percy, Yew i Sycamore, które zapewniają abstrakcyjną złożoność i doskonałe doświadczenie programistyczne.