HTTP-Client in Rust: Anfragen richtig stellen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

HTTP-Client in Rust: Anfragen richtig stellen



Rust ist eine moderne Systemprogrammiersprache, die aufgrund ihrer Leistung und Speichersicherheit an Popularität gewonnen hat. Viele Entwickler, die an Python oder JavaScript gewöhnt sind, fragen sich jedoch: Wie führt man HTTP-Anfragen in Rust durch? In diesem Artikel werden wir die Erstellung eines HTTP-Clients in Rust unter Verwendung der beliebten Bibliothek reqwest behandeln. Sie erfahren, wie Sie GET- und POST-Anfragen durchführen, JSON verarbeiten, Header verwalten und mit Asynchronität arbeiten. Nach der Lektüre können Sie einen HTTP-Client sicher in Ihre Rust-Projekte integrieren.



1. Installation und Einrichtung der Umgebung



Erstellen wir zunächst ein neues Rust-Projekt und fügen die erforderlichen Abhängigkeiten hinzu. Öffnen Sie das Terminal und führen Sie Folgendes aus:



cargo new http_client_rustcd http_client_rust


Bearbeiten Sie nun die Datei Cargo.toml und fügen Sie die folgenden Abhängigkeiten hinzu:



[dependencies]reqwest = { version = "0.11", features = ["json"] }tokio = { version = "1", features = ["full"] }serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"


Lassen Sie uns jede Bibliothek erklären:

  • reqwest — der primäre HTTP-Client. Das Flag json fügt Unterstützung für JSON-Serialisierung/Deserialisierung hinzu.
  • tokio — eine asynchrone Laufzeitumgebung, die für die asynchrone Arbeit von reqwest erforderlich ist.
  • serde und serde_json — für die Arbeit mit JSON-Strukturen.


Führen Sie nach dem Hinzufügen der Abhängigkeiten cargo build aus, um alle Bibliotheken herunterzuladen und zu kompilieren.



2. Einfache GET-Anfrage



Beginnen wir mit einer einfachen GET-Anfrage an eine öffentliche API. Erstellen wir eine Struktur für die Antwort und führen eine Anfrage an den JSONPlaceholder-Dienst durch:



use reqwest;use serde::Deserialize;

#[derive(Debug, Deserialize)]struct Post { userId: u32, id: u32, title: String, body: String,}

#[tokio::main]async fn main() -> Result<(), reqwest::Error> { let url = "https://jsonplaceholder.typicode.com/posts/1"; let response = reqwest::get(url).await?; let post: Post = response.json().await?; println!("{:#?}", post); Ok(())}


Lassen Sie uns den Code erklären:

  • Das Attribut #[derive(Debug, Deserialize)] generiert automatisch Traits für die Ausgabe und Deserialisierung.
  • #[tokio::main] wandelt die Funktion in einen asynchronen Einstiegspunkt um.
  • reqwest::get() führt eine GET-Anfrage aus, und .await wartet auf deren Abschluss.
  • response.json() wandelt die JSON-Antwort in unsere Struktur um.


Führen Sie den Code mit dem Befehl cargo run aus. Sie sehen die Beitragsdaten in der Konsole.



3. POST-Anfrage mit Datensendung



Sehen wir uns nun an, wie Daten an den Server gesendet werden. Für eine POST-Anfrage müssen wir eine Struktur für die zu sendenden Daten erstellen und die Methode post() verwenden:



use reqwest::Client;use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize)]struct NewPost { title: String, body: String, userId: u32,}

#[derive(Debug, Deserialize)]struct CreatedPost { id: u32, title: String, body: String, userId: u32,}

#[tokio::main]async fn main() -> Result<(), reqwest::Error> { let client = Client::new(); let new_post = NewPost { title: "Mein erster Beitrag in Rust".to_string(), body: "Dies ist der Text des Beitrags, gesendet mit reqwest".to_string(), userId: 1, }; let response = client .post("https://jsonplaceholder.typicode.com/posts") .json(&new_post) .send() .await?; let created_post: CreatedPost = response.json().await?; println!("Beitrag mit ID erstellt: {}", created_post.id); println

Blogs

Buchempfehlungen