cURL → Rust (reqwest & tokio)
Transformez vos commandes cURL en requêtes HTTP Rust asynchrones et idiomatiques avec reqwest, serde_json, en-têtes personnalisés et le runtime Tokio.

Générateur de code cURL vers Rust (reqwest & tokio)

Convertissez des commandes cURL en requêtes HTTP asynchrones et idiomatiques en Rust à l'aide de reqwest, serde_json, d'en-têtes personnalisés et du runtime Tokio.

Confidentialité 100% côté client
Zéro transmission au serveur
Préréglages :
Structurer le payload avec serde_json
Lire le corps de réponse (Texte / JSON)
Gestion robuste des erreurs (Result & ?)
Utiliser rustls-tls (TLS 100% Rust)
Commande cURL en entrée
//! cURL to Rust HTTP Client generated by ToolsAA (reqwest & tokio)
//! Zero-server-upload client-side generation, memory safe and asynchronous.

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

// ============================================================================
// TYPE-SAFE DATA MODELS (Serde derive)
// ============================================================================

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MessagItem {
    pub role: String,
    pub content: String,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RequestPayload {
    pub model: String,
    pub temperature: f64,
    pub max_tokens: i64,
    pub stream: bool,
    pub messages: Vec<MessagItem>,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Thread-safe reqwest client with internal connection pooling
    let client = Client::new();

    // Construct typed Rust request payload
    let payload = RequestPayload {
        model: "gpt-4o".to_string(),
        temperature: 0.7,
        max_tokens: 1024,
        stream: false,
        messages: vec![
            MessagItem {
                role: "system".to_string(),
                content: "You are an expert Rust systems programmer.".to_string(),
            },
            MessagItem {
                role: "user".to_string(),
                content: "Explain zero-cost abstractions in reqwest and tokio.".to_string(),
            }
        ],
    };

    // Build and dispatch HTTP request
    let response = client.post("https://api.openai.com/v1/chat/completions")
        .bearer_auth("sk-proj-1234567890abcdef")
        .json(&payload)
        .send()
        .await?;

    // Inspect HTTP status code
    let status = response.status();
    println!("Status Code: {}", status);

    // Parse response body as structured JSON
    let json_body: serde_json::Value = response.json().await?;
    println!("Response JSON:\n{:#}", json_body);

    Ok(())
}
Méthode HTTP
POSThttps://api.openai.com/v1/chat/completions
Hôte cible
1 Headers
json payload • 0 query params
En-têtes & Charge utile
reqwest 0.12 • Tokio 1.x
Zero-Cost Hyper Runtime

Transpilation 100% Côté Client

L'analyse syntaxique de cURL et la génération de code Rust s'exécutent entièrement dans la mémoire de votre navigateur, sans transmission de données sensibles à des serveurs distants.

Tokio Asynchrone & reqwest Idiomatique

Génère du code Rust asynchrone et idiomatique basé sur reqwest et le runtime Tokio, avec syntaxe fluide de type builder, en-têtes typés et gestion d'erreurs via l'opérateur ?.

Cargo.toml & Prise en Charge Complète des Options

Génère les dépendances prêtes à l'emploi pour Cargo.toml avec prise en charge des paramètres d'URL, jetons Bearer, authentification Basic (-u), formulaires multipart, délais d'attente et TLS.

Référence technique et guide d'architecture

Guide Développeur du Générateur de Code cURL vers Rust (reqwest & tokio) — Guide de référence

Convertissez des commandes cURL en requêtes HTTP asynchrones et idiomatiques en Rust à l'aide de reqwest, serde_json, d'en-têtes personnalisés et du runtime Tokio.

Paramètres clés et contrôles

clientEnginestring

Architecture du client HTTP Rust cible : reqwest asynchrone avec le runtime Tokio ou reqwest::blocking synchrone.

Par défaut : reqwest (async)
jsonParserstring

Bibliothèque de sérialisation et désérialisation JSON pour les requêtes structurées et réponses typées (serde_json::Value vs structures fortement typées).

Par défaut : serde_json
runtimeFlavorstring

Configuration de la macro de point d'entrée asynchrone (#[tokio::main] pour un exécuteur multithread).

Par défaut : #[tokio::main]
cargoTomlOutputboolean

Génère l'extrait de manifeste de dépendances Cargo.toml avec les fonctionnalités requises telles que json, multipart et stream.

Par défaut : true
connectionPoolingboolean

Structure le code généré pour réutiliser les instances de reqwest::Client entre les tâches et prévenir l'épuisement des sockets.

Par défaut : true

Conseils de pro et bonnes practices

reqwest désactive les fonctionnalités

reqwest désactive les fonctionnalités facultatives par défaut pour réduire le temps de compilation. Lors de l'envoi de JSON avec .json(&payload) ou de fichiers multipart, déclarez reqwest = { version = "0.12", features = ["json", "multipart"] } dans Cargo.toml.

reqwest

reqwest::Client encapsule un pool de connexions et l'état TLS au sein d'un Arc. Initialisez un client unique au démarrage de l'application et clonez-le (client.clone()) entre les tâches asynchrones pour éviter l'épuisement des ports TCP et les renégociations TLS.

Évitez d'utiliser unwrap

Évitez d'utiliser unwrap() ou expect() en production. Définissez vos fonctions avec un retour Result<T, Box<dyn std::error::Error + Send + Sync>> ou anyhow::Result afin que l'opérateur ? propage proprement les erreurs DNS et dépassements de délai.

Pour transférer des fichiers

Pour transférer des fichiers volumineux ou consommer des flux SSE (Server-Sent Events), n'allouez pas la totalité des données en RAM. Utilisez reqwest::Body::wrap_stream avec tokio::io::AsyncRead pour streamer les données avec une empreinte mémoire minime.

Pièges courants et dépannage

error[E0599]: no method named `json` found for struct `RequestBuilder` in the current scope

La fonctionnalité 'json' est absente de votre Cargo.toml. Ajoutez reqwest = { version = "0.12", features = ["json"] } et serde_json = "1.0" à vos dépendances.

error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option`

Assurez-vous que la signature de votre fonction main retourne un type Result, comme async fn main() -> Result<(), Box<dyn std::error::Error>> ou anyhow::Result<()>.

reqwest::Error: error sending request for url: connection closed before message completed

Cette erreur survient lorsque des équilibreurs de charge ferment les connexions HTTP/2 inactives. Configurez reqwest::Client::builder().http2_keep_alive_timeout(Duration::from_secs(30)).pool_idle_timeout(Duration::from_secs(60)).build().

Foire aux questions (FAQ)

Comment l'authentification basique cURL (-u user:password) est-elle traduite avec reqwest ?▼

reqwest intègre la méthode .basic_auth("user", Some("password")), qui encode automatiquement en Base64 et attache l'en-tête Authorization: Basic sans manipulation manuelle.

Quelle est la différence entre reqwest async et reqwest::blocking ?▼

reqwest async repose sur Hyper et le runtime asynchrone Tokio pour des performances I/O élevées et non bloquantes. reqwest::blocking fournit une interface synchrone adaptée aux scripts CLI légers sans runtime async.

Comment les requêtes multipart (-F cle=valeur -F fichier=@chemin) sont-elles gérées en Rust ?▼

Elles s'appuient sur reqwest::multipart::Form. Les champs texte s'ajoutent avec .text("cle", "valeur"), et les fichiers via reqwest::multipart::Part::bytes(tokio::fs::read("chemin").await?).file_name("nom").

Comment les paramètres d'URL (-G --data-urlencode) sont-ils traités en Rust ?▼

Utilisez la méthode .query(&[("cle", "valeur")]) sur RequestBuilder. Elle accepte des vecteurs ou dictionnaires de paires clé-valeur et gère l'encodage selon la norme RFC 3986.

Mes commandes cURL ou clés d'API sont-elles transmises ou stockées sur un serveur distant ?▼

Non. L'analyse syntaxique de la commande, l'extraction des paramètres et la synthèse du code source Rust s'effectuent à 100 % dans votre navigateur via JavaScript côté client.

Outils et utilitaires connexes

Tous les outils →
Guide développeur du générateur de code cURL vers Ruby (Net::HTTP & Faraday)Développement

Convertissez vos requêtes cURL en code Ruby propre et idiomatique avec Net::HTTP, URI, Faraday et la gestion native du JSON.

Ouvrir l'outil→
Générateur de NetworkPolicy K8S Guide DéveloppeurDéveloppement

Référence technique pour générer des manifestes Kubernetes NetworkPolicy déclaratifs, l'isolation de pods zero-trust, les règles d'ingress/egress, les blocs CIDR et les ports multiples.

Ouvrir l'outil→
Guide Développeur : Générateur YAML Kubernetes RBAC Role & ClusterRoleBindingDéveloppement

Concevez des manifestes Kubernetes RBAC pour Role, ClusterRole, RoleBinding et ClusterRoleBinding avec groupes d'API, verbes de ressources et comptes de service.

Ouvrir l'outil→
Guide du Développeur du Générateur de YAML Kubernetes StatefulSet & Headless ServiceDéveloppement

Générez des manifestes Kubernetes StatefulSet de qualité production avec Headless Service associé, volumeClaimTemplates persistants, réplicas et podManagementPolicy.

Ouvrir l'outil→
Référence Développeur Nginx Location Match TesterDéveloppement

Guide technique pour tester les directives location Nginx et analyser l'ordre de priorité des modificateurs.

Ouvrir l'outil→
Référence Développeur Cloudflare Headers et RedirectsDéveloppement

Guide technique et aide-mémoire de syntaxe pour configurer les fichiers _headers et _redirects de Cloudflare Pages, stratégies de sécurité et réécritures edge.

Ouvrir l'outil→