Convertisseur curl
DévConvertissez une commande curl en fetch JavaScript, axios, Python, Go, Java et HTTPie — en direct, avec onglets multilingues.
Les URL distantes ne sont pas récupérées ; collez votre JSON directement.
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#
- Collez votre commande curl dans le panneau Entrée à gauche. Vous pouvez coller le mot
curlde 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. - Cliquez sur Exemple pour charger un cas réaliste si vous voulez voir la forme d’abord, ou Effacer pour vider le panneau.
- 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.
- Lisez le code généré dans le panneau. Utilisez Copier dans la barre d’onglets pour le récupérer.
- 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 feraitbash. 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 ethttpiecôte à côte. Si vous hésitez entrefetchetaxios, 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 surdata=. - Auth basique décodée une fois. Un drapeau
-u user:passdevientbtoa("user:pass")dans fetch, le blocauthdans axios, le tupleauth=dans requests, etSetBasicAuthdans Go — chaque idiome comme la langue l’attend. - Les drapeaux inconnus sont signalés, pas avalés.
-o output.txtou--proxyremontent dans la barre d’état commeunknown 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.