Reqwest pour Rust : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que Reqwest et pourquoi en a-t-on besoin ?

\n\n

Reqwest est l'une des bibliothèques les plus populaires et pratiques pour effectuer des requêtes HTTP en Rust. Elle fournit une API ergonomique de haut niveau, construite sur la base du moteur HTTP asynchrone hyper et de tokio. Si vous développez en Rust un scraper web, un client pour une API REST, un bot Telegram ou si vous souhaitez simplement télécharger un fichier, Reqwest deviendra votre outil principal.

\n\n

La bibliothèque prend en charge à la fois les requêtes asynchrones (par défaut) et synchrones (bloquantes), le travail avec JSON, multipart/form-data, les cookies, les proxys, TLS/SSL, les redirections et bien plus encore. Reqwest est conçu pour être intuitif pour les développeurs familiers avec la bibliothèque Python requests ou la bibliothèque JavaScript fetch.

\n\n

Fonctionnalités clés :

\n
    \n
  • Requêtes HTTP/HTTPS asynchrones et synchrones (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS)
  • \n
  • Sérialisation et désérialisation automatiques du JSON (via serde)
  • \n
  • Prise en charge de multipart/form-data pour le téléchargement de fichiers
  • \n
  • Gestion des cookies (Cookie Store)
  • \n
  • Prise en charge des proxys (HTTP, HTTPS, SOCKS5)
  • \n
  • Personnalisation des timeouts, en-têtes, User-Agent
  • \n
  • Travail avec les flux (streaming) pour les réponses volumineuses
  • \n
  • Sécurité par défaut (vérification des certificats SSL)
  • \n
\n\n

Installation

\n\n

Pour utiliser Reqwest, vous aurez besoin d'un projet Rust avec un fichier Cargo.toml. Ajoutez la dépendance dans la section [dependencies] :

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

Explication des features :

\n
    \n
  • json — active la prise en charge de la sérialisation/désérialisation JSON via serde.
  • \n
  • multipart — pour l'envoi de multipart/form-data.
  • \n
  • cookies — pour la gestion automatique des cookies.
  • \n
  • socks — pour la prise en charge des proxys SOCKS5.
  • \n
  • Si vous avez besoin uniquement d'un client synchrone (bloquant), ajoutez la feature blocking.
  • \n
\n\n

Pour une utilisation synchrone (sans asynchrone), vous pouvez configurer ainsi :

\n\n
reqwest = { version = "0.12", features = ["blocking", "json"] }
\n\n

Démarrage rapide avec un exemple de code

\n\n

Faisons une simple requête GET vers une API publique et affichons le résultat. Créez un fichier main.rs :

\n\n
use reqwest;\nuse std::error::Error;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn Error>> {\n    // Exécute une requête GET\n    let response = reqwest::get("https://api.github.com/repos/rust-lang/rust")\n        .await?;\n\n    // Vérifie le statut\n    if response.status().is_success() {\n        // Parse le corps de la réponse en JSON (sans typage strict)\n        let body: serde_json::Value = response.json().await?;\n        println!("Nom du dépôt : {}", body["full_name"]);\n        println!("Description : {}", body["description"].as_str().unwrap_or("Pas de description"));\n        println!("Étoiles : {}", body["stargazers_count"]);\n    } else {\n        eprintln!("Erreur : {}", response.status());\n    }\n\n    Ok(())\n}
\n\n

Exécutez avec la commande cargo run. Vous devriez voir les informations sur le dépôt Rust.

\n\n

Méthodes et fonctions principales

\n\n

1. reqwest::get()

\n

Ce qu'elle fait : Exécute une requête HTTP GET vers l'URL spécifiée. C'est le moyen le plus simple d'obtenir des données. Retourne une Response.

\n

Paramètres :

\n
    \n
  • url: impl IntoUrl — une chaîne ou une URL vers laquelle la requête est envoyée.
  • \n
\n

Exemple :

\n
let resp = reqwest::get("https://httpbin.org/get"                    

Recommendations