Pack Camo

Convertisseur cURL en code

Transformez une commande curl en fetch, axios, Python requests, Go, PHP et plus.

Tout s'exécute localement — rien n'est téléversé.

Commande curl

POST api.example.com

fetch

23 lignes

// Browsers do not let scripts set Cookie; fetch ignores them.
const response = await fetch("https://api.example.com/v1/orders?expand=items", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc",
    Cookie: "session=abc123; theme=dark",
  },
  body: JSON.stringify({
    "customer": "cus_42",
    "items": [
      {
        "sku": "TSHIRT-M",
        "qty": 2
      }
    ],
    "gift": false,
    "note": null
  }),
  signal: AbortSignal.timeout(30000),
});

console.log(response.status, await response.text());

Collez une commande curl, obtenez du code qui fonctionne

Ce convertisseur transforme une commande curl en la même requête HTTP en JavaScript fetch, axios, Node.js, Python requests, Go net/http, extension curl de PHP ou Rust reqwest. Il lit curl comme le font votre shell et curl lui-même : guillemets simples et doubles, chaînes $'…', continuations de ligne, options combinées comme -sSL, données -d répétées et champs multipart -F. Les en-têtes, les cookies, l'authentification basic et bearer, les corps JSON, les timeouts et les réglages TLS sont repris, et tout ce qui ne peut pas être traduit est signalé. La commande est analysée dans votre navigateur et n'est jamais envoyée nulle part : les tokens et cookies qu'elle contient restent privés.

Comment convertir une commande curl en code

  1. 1Copiez une requête au format curl. Dans Chrome, Edge ou Firefox, ouvrez les outils de développement, allez dans l'onglet Network, faites un clic droit sur une requête et choisissez Copy › Copy as cURL. Les variantes bash et cmd de Windows fonctionnent toutes les deux.
  2. 2Collez la commande dans le volet de gauche. Les commandes sur plusieurs lignes avec des continuations \ ou ^ sont acceptées.
  3. 3Choisissez le langage cible : fetch, axios, Node.js, Python, Go, PHP ou Rust, ou JSON pour voir la requête analysée.
  4. 4Lisez les remarques sous le code à propos des options ignorées ou à vérifier, puis copiez le code ou téléchargez-le sous forme de fichier.

Ce qui est converti

Méthode et URL
-X/--request, --url, -G/--get (les données passent dans la query string), -I/--head, -T/--upload-file (PUT). Sans -X, la méthode est choisie comme le fait curl : POST s'il y a un corps, GET sinon.
En-têtes
-H/--header, -A/--user-agent, -e/--referer, -b/--cookie et -r/--range. Les en-têtes répétés sont combinés.
Corps
-d/--data, --data-raw, --data-binary et --data-urlencode (joints avec &, comme le fait curl), --json, et les champs multipart -F/--form, y compris les envois de fichiers avec ;type= et ;filename=.
Authentification
-u/--user pour l'authentification basic, --digest, --oauth2-bearer, et les identifiants écrits dans l'URL.
Options de connexion
-k/--insecure, -L/--location, --compressed, -m/--max-time et -x/--proxy, lorsque le langage cible a un équivalent.

Les corps JSON deviennent de vrais objets

Quand le corps est du JSON, soit parce que le Content-Type l'indique, soit parce que c'en est clairement, il est mis en forme et, si le langage le permet, écrit comme une valeur native : un objet passé à JSON.stringify pour fetch, un objet simple pour axios, et un dictionnaire passé via json= pour Python requests, avec true, false et null transformés en True, False et None. C'est bien plus facile à modifier qu'une chaîne échappée. Désactivez Formater les corps JSON pour garder le corps tel quel, octet pour octet.

fetch dans le navigateur ou Node.js

Les deux cibles fetch diffèrent car les navigateurs limitent ce qu'une page peut envoyer. Un script dans un navigateur ne peut pas définir Cookie, Referer, Host, Accept-Encoding ni aucun en-tête Sec-, ne peut pas ignorer la vérification des certificats et ne peut pas lire de fichiers à partir d'un chemin. La cible navigateur indique quels en-têtes seront supprimés. La cible Node.js peut faire tout cela : les fichiers sont lus avec openAsBlob et readFile, et --insecure ou un proxy deviennent un dispatcher undici.

Pour savoir ce que signifie le statut de la réponse une fois la requête exécutée, consultez la référence des codes de statut HTTP. Les valeurs de query à échapper peuvent être encodées avec l'encodeur d'URL.

Les règles de guillemets, gérées

La plupart des erreurs de conversion viennent des guillemets. Dans un shell POSIX, les guillemets simples gardent tout littéralement, les guillemets doubles traitent toujours \" et \$, et $'…' comprend les échappements comme \n et \x41. Une barre oblique inverse en fin de ligne prolonge la commande. Le cmd de Windows utilise plutôt ^ pour les échappements et les continuations, ce que produit « Copy as cURL (cmd) ». Le tokenizer suit chacune de ces règles, donc le corps envoyé par votre code est exactement celui que curl aurait envoyé.

Tout ce qui suit un pipe, un point-virgule ou une redirection, comme | jq ., appartient au shell et non à curl, et est ignoré avec une remarque.

Questions fréquentes

Ma commande curl est-elle envoyée à un serveur ?
Non. La commande est analysée et le code est généré dans votre navigateur. Les tokens, cookies et mots de passe qu'elle contient ne quittent jamais votre appareil.
Comment copier une requête au format curl depuis le navigateur ?
Ouvrez les outils de développement (F12), sélectionnez l'onglet Network, faites un clic droit sur la requête et choisissez Copy, puis Copy as cURL. Sous Windows, vous pouvez coller ici la version bash ou la version cmd.
Quelles options de curl sont prises en charge ?
Les options qui définissent une requête : méthode, URL, en-têtes, cookies, toutes les variantes de -d, --json, formulaires -F, authentification -u, -G, -I, -T, -L, -k, --compressed, --max-time et --proxy. Les options de sortie comme -s, -o et -v n'affectent pas la requête et sont ignorées.
Pourquoi le code fetch pour navigateur omet-il certains en-têtes ?
Les navigateurs interdisent aux scripts de définir des en-têtes comme Cookie, Referer, Host et Accept-Encoding, et fetch les supprime sans prévenir. Utilisez la cible Node.js si vous devez les envoyer.
Comment les envois de fichiers sont-ils convertis ?
Un champ -F comme file=@photo.jpg devient un champ fichier multipart qui lit photo.jpg sur le disque en Node.js, Python, Go, PHP et Rust. Avec fetch dans le navigateur, il utilise un fichier choisi via un <input type="file">, car les pages ne peuvent pas lire de fichiers par leur chemin.
À quoi sert --data-urlencode ?
Il applique le percent-encoding à la valeur avant de l'envoyer : name=a b&c est donc envoyé sous la forme name=a%20b%26c. Le convertisseur applique le même encodage, si bien que le code généré envoie les mêmes octets.
curl suit-il les redirections ?
Pas sans -L. La plupart des bibliothèques HTTP suivent les redirections par défaut, donc le code généré les suit généralement dans tous les cas ; l'extension curl de PHP ne le fait que si -L est fourni.