HTTP-Client in Rust: Anfragen richtig stellen von A bis Z

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

Einleitung: Warum Rust eine ausgezeichnete Wahl für HTTP-Anfragen ist

\n

Rust ist eine systemnahe Programmiersprache, die aufgrund ihrer Sicherheit, Leistungsfähigkeit und des Fehlens eines Garbage Collectors an Popularität gewonnen hat. Wenn Sie eine Netzwerkanwendung, einen Web-Scraper oder einen Microservice entwickeln, ist die Fähigkeit, HTTP-Anfragen in Rust korrekt durchzuführen, eine unverzichtbare Fähigkeit. In diesem Artikel werden wir durchgehen, wie man einen vollwertigen HTTP-Client in Rust mit der Bibliothek reqwest erstellt, die der De-facto-Standard für die Arbeit mit HTTP im Rust-Ökosystem ist.

\n

Wir werden den Weg von der Installation der Abhängigkeiten bis zur Fehlerbehandlung und der Arbeit mit JSON gehen. Am Ende des Artikels werden Sie in der Lage sein, zuverlässige und schnelle HTTP-Clients in Rust zu schreiben, die Sie im Produktivbetrieb nicht im Stich lassen.

\n\n

Installation und Projekteinrichtung

\n

Der erste Schritt ist die Erstellung eines neuen Projekts und das Hinzufügen der Abhängigkeit reqwest mit Unterstützung für Asynchronität und JSON.

\n
cargo new rust_http_client\ncd rust_http_client
\n

Öffnen Sie Cargo.toml und fügen Sie hinzu:

\n
[dependencies]\nreqwest = { version = "0.12", features = ["json"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"
\n

Lassen Sie uns jede Abhängigkeit erklären:

\n
    \n
  • reqwest — der primäre HTTP-Client. Das Flag json aktiviert die Unterstützung für Serialisierung/Deserialisierung.
  • \n
  • tokio — die asynchrone Laufzeitumgebung von Rust. HTTP-Anfragen in reqwest sind standardmäßig asynchron.
  • \n
  • serde / serde_json — für die Arbeit mit JSON (Strukturen, Serialisierung).
  • \n
\n

Jetzt ist alles bereit zum Schreiben von Code.

\n\n

Basis-GET-Anfrage: Daten vom Server abrufen

\n

Beginnen wir mit einer einfachen GET-Anfrage. Erstellen wir eine Funktion, die Daten von einer öffentlichen API abruft und auf der Konsole ausgibt.

\n
use reqwest::Error;\n\n#[tokio::main]\nasync fn main() -> Result<(), Error> {\n    let url = "https://jsonplaceholder.typicode.com/posts/1";\n    let response = reqwest::get(url).await?;\n\n    println!("Status: {}", response.status());\n\n    let body = response.text().await?;\n    println!("Antworttext:\\n{}", body);\n\n    Ok(())\n}
\n

Was hier passiert:

\n
    \n
  • Wir verwenden das Makro #[tokio::main], um eine asynchrone Funktion zu starten.
  • \n
  • reqwest::get(url).await? führt eine GET-Anfrage aus. Das Zeichen ? leitet den Fehler weiter, falls die Anfrage fehlschlägt.
  • \n
  • response.status() gibt den HTTP-Status zurück (z. B. 200 OK).
  • \n
  • response.text().await? extrahiert den Antworttext als Zeichenkette.
  • \n
\n

Führen Sie den Code mit dem Befehl cargo run aus. Sie sehen ein JSON-Objekt mit den Beitragsdaten.

\n\n

Header und Anfrageparameter hinzufügen

\n

In realen Anwendungen müssen oft Header (z. B. API-Schlüssel) oder Query-Parameter übergeben werden. So geht's:

\n
use reqwest::Client;\nuse std::collections::HashMap;\n\n#[tokio::main]\nasync fn main() -> Result<(), reqwest::Error> {\n    let client = Client::new();\n\n    let mut params = HashMap::new();\n    params.insert("userId", "1");\n\n    let response = client\n        .get("https://jsonplaceholder.typicode.com/posts")\n        .header("Accept", "application/json")\n        .query(&params)\n        .send()\n        .await?;\n\n    let posts: serde_json::Value = response.json().await?;\n    println!("Anzahl der Beiträge: {}", posts.as_array().unwrap().len());\n\n    Ok(())\n}
\n

Wichtige Punkte:

\n
    \n
  • Wir erstellen einen Client — dies ist ein wiederverwendbarer HTTP-Client mit einem Verbindungspool. Verwenden Sie für Produktionscode immer Client anstelle von direkten Aufrufen von reqwest::get.
  • \n
  • Die Methode .header() fügt einen Header hinzu.
  • \n
  • .query() akzeptiert ein Wörterbuch mit Parametern und kodiert die URL automatisch.
  • \n
  • .json() deserialisiert sofort

Blogs

Buchempfehlungen