Outils
Guides

Convertisseur curl

Dév

Convertissez une commande curl en fetch JavaScript, axios, Python, Go, Java et HTTPie — en direct, avec onglets multilingues.

100 % côté client Sans backend

Les URL distantes ne sont pas récupérées ; collez votre JSON directement.

Entrée
Collez une commande curl pour voir le code converti.
Sur cette page

Qu’est-ce qu’un convertisseur curl ?#

curl est ce qui s’approche le plus d’une langue véhiculaire pour HTTP. Tout panneau DevTools du navigateur, tout site de docs d’API et tout ticket de support finit par vous remettre une commande curl — « copier en cURL » est la façon dont une requête voyage d’un navigateur à un rapport de bogue. Le problème, c’est qu’une commande curl collée est rarement ce que vous pouvez réellement exécuter dans votre base de code. Votre service est écrit en Python, ou en Go, ou en fetch côté navigateur ; vous ne voulez pas déléguer à curl, vous voulez l’appel équivalent dans le client HTTP que vous utilisez déjà.

Cette page jette ce pont. Collez une commande curl à gauche, et elle analyse la syntaxe shell — drapeaux, guillemets, continuations de ligne, en-têtes, corps, auth — en une requête structurée, puis émet le code équivalent pour six cibles d’un coup : fetch navigateur, axios, requests Python, net/http Go, HttpURLConnection Java, et httpie. Vous lisez à travers les onglets, copiez celui qui correspond à votre pile, et vous passez à la suite.

L’analyse s’exécute entièrement dans votre navigateur. La commande que vous collez n’atteint jamais un serveur, ce qui compte parce que les vraies commandes curl contiennent fréquemment des jetons bearer, des identifiants d’authentification basique, ou des cookies signés.

Comment l’utiliser#

  1. Collez votre commande curl dans le panneau Entrée à gauche. Vous pouvez coller le mot curl de tête ou l’omettre ; les deux fonctionnent. Les commandes multi-lignes jointes par un \ final sont comprises, comme les commandes copiées directement depuis un terminal où chaque drapeau est sur sa propre ligne.
  2. Cliquez sur Exemple pour charger un cas réaliste si vous voulez voir la forme d’abord, ou Effacer pour vider le panneau.
  3. Choisissez un langage cible dans la barre d’onglets au-dessus de la sortie : fetch, axios, python, go, java ou httpie. Les six sont générés depuis la même analyse, donc changer d’onglet est instantané — pas de ré-exécution.
  4. Lisez le code généré dans le panneau. Utilisez Copier dans la barre d’onglets pour le récupérer.
  5. Surveillez la barre d’état sous les panneaux. Si l’analyseur a rencontré un drapeau qu’il ne modélise pas (une redirection vers un fichier de sortie, un réglage de proxy), il le dit explicitement au lieu de le laisser tomber en silence.

Fonctionnalités clés#

  • Un véritable tokenizer shell, pas un grattage regex. Guillemets simples, guillemets doubles, guillemetage ANSI-C $'...' (avec échappements \n, \t, \x41, é), continuation de ligne par barre oblique inversée-saut de ligne, et la différence entre "a\b" et 'a\b' sont gérées comme le ferait bash. Les convertisseurs naïfs qui découpent sur les blancs cassent dès qu’une valeur d’en-tête contient un espace.
  • Six cibles depuis une analyse. Vous voyez fetch, axios, Python, Go, Java et httpie côte à côte. Si vous hésitez entre fetch et axios, vous pouvez comparer leur traitement du même en-tête d’auth en deux clics.
  • Intelligence du corps. Quand la requête porte Content-Type: application/json, l’émetteur Python la passe via le mot-clé json= pour qu’un corps en forme de dict soit envoyé correctement ; sinon il retombe sur data=.
  • Auth basique décodée une fois. Un drapeau -u user:pass devient btoa("user:pass") dans fetch, le bloc auth dans axios, le tuple auth= dans requests, et SetBasicAuth dans Go — chaque idiome comme la langue l’attend.
  • Les drapeaux inconnus sont signalés, pas avalés. -o output.txt ou --proxy remontent dans la barre d’état comme unknown args, pour que vous ne soyez jamais induit en erreur en pensant qu’une conversion a capturé une redirection ou un proxy qu’elle a en réalité laissé tomber.
  • Pas de backend, pas de fuite. La commande est tokenizée en mémoire par le script de la page lui-même. Pas d’appel réseau qui emporte votre jeton collé ailleurs.

Exemple commenté#

Chargez Exemple (ou collez l’équivalent de ce que produisent les DevTools du navigateur quand vous faites « Copier en cURL » pour un POST JSON) :

curl -X POST https://example.com/api/v1/users \
  -H 'Authorization: Bearer tok' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Alice","role":"admin"}'

Basculez sur l’onglet fetch et vous obtenez :

const response = await fetch("https://example.com/api/v1/users", {
  method: "POST",
  headers: {
    "Authorization": "Bearer tok",
    "Content-Type": "application/json",
  },
  body: "{\"name\":\"Alice\",\"role\":\"admin\"}",
});

Basculez sur l’onglet python. Comme Content-Type est JSON, le corps passe par le mot-clé json= :

import requests

url = 'https://example.com/api/v1/users'
headers = {
    'Authorization': 'Bearer tok',
    'Content-Type': 'application/json',
}
payload = '{"name":"Alice","role":"admin"}'
response = requests.request('POST', url, headers=headers, json=payload)
print(response.status_code)

La même commande est aussi immédiatement disponible sous les onglets go, java, axios et httpie — six conversions pour le prix d’un seul collage.

FAQ#

Il indique « unknown args » pour ma commande. Qu’a-t-il sauté ?#

L’analyseur modélise les drapeaux curl qui servent à décrire une requête — méthode, URL, en-têtes, corps, authentification basique, --compressed, -k, -L. Les drapeaux qui décrivent le propre comportement de curl (comme -o pour écrire le corps dans un fichier, --proxy, --connect-timeout, --cert) ne sont pas traduits, parce qu’ils n’ont pas d’équivalent dans un appel fetch. Ils sont collectés et affichés dans la barre d’état, pour que vous sachiez qu’ils ont été laissés tomber délibérément, pas perdus.

Puis-je convertir une commande qui utilise le guillemetage ANSI-C $'...' ?#

Oui. Les en-têtes et corps copiés depuis des terminaux arrivent parfois enveloppés dans $'...' afin que les séquences d’échappement comme \n ou \t soient interprétées par le shell. Le tokenizer comprend le guillemetage ANSI-C et décode \n, \t, \xHH, \uHHHH, \UHHHHHHHH ainsi que les échappements simples, donc les octets que voit le convertisseur correspondent aux octets que curl aurait envoyés.

Pourquoi ma sortie Python utilise-t-elle json= parfois et data= d’autres fois ?#

L’émetteur regarde vos en-têtes. Quand Content-Type: application/json est présent, il passe le corps par le mot-clé json=, ce qui laisse requests régler l’en-tête et encoder la charge utile correctement. Pour tout autre type de contenu (form-encodé, texte brut, multipart) il retombe sur data=, parce que forcer json= y serait erroné.

Envoie-t-il la requête pour moi ?#

Non, et c’est délibéré. Cet outil ne fait que traduire la commande en code ; il ne l’exécute jamais. L’extrait généré s’exécute dans votre propre programme, sous vos propres identifiants, là où vous pouvez l’inspecter avant qu’il fasse quoi que ce soit en live.