Rust:
Einen HTTP-Request senden
How to:
Um in Rust eine HTTP-Anfrage zu senden, nutzen wir die reqwest
-Bibliothek. Hier ist ein einfaches Beispiel, wie man eine GET-Anfrage absendet:
use reqwest;
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let response = reqwest::get("https://www.rust-lang.org")
.await?
.text()
.await?;
println!("Body:\n{}", response);
Ok(())
}
Ausgabe:
Body:
<!doctype html>
...
Für POST-Anfragen sieht das ähnlich aus, mit zusätzlichen Daten im Body:
use reqwest;
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let client = reqwest::Client::new();
let res = client.post("http://httpbin.org/post")
.body("key=value")
.send()
.await?;
println!("Status: {}", res.status());
Ok(())
}
Ausgabe:
Status: 200 OK
Deep Dive:
Historisch gesehen basieren HTTP-Anfragen auf dem Hypertext Transfer Protocol, das 1991 eingeführt wurde. Rust bietet, wie die meisten modernen Programmiersprachen, Pakete, um diesen Prozess zu vereinfachen. Während reqwest
für viele ein Go-to-Paket ist, gibt es Alternativen wie hyper
für niedrigere Ebenen der Abstraktion oder surf
, falls nur Async-STD verfügbar ist.
Die Implementierung einer HTTP-Anfrage in Rust erfordert eine asynchrone Umgebung, da Netzwerkanfragen I/O-blockierend sein können. Rust’s async/await
ermöglicht effiziente, nicht-blockierende Ausführung. reqwest
nutzt hyper
als HTTP-Implementierung, die wiederum auf tokio
aufbaut, einem asynchronen Runtime.