Analyseur cURL
S’exécute dans votre navigateur ; rien n’est envoyé
Lisez une commande cURL comme la requête qu’elle envoie, et transformez-la en fetch, en Python requests ou en bash bien rangé. Rien n’est envoyé.
Command
No command yet
Qu’est-ce qu’une commande cURL ?
cURL est un programme en ligne de commande qui envoie des requêtes HTTP, et une commande cURL est la façon la plus courante de partager une requête entre développeurs. Une seule ligne contient tout ce que reçoit le serveur : la méthode après -X, l’URL, chaque en-tête après -H et le corps après -d.
On croise des commandes cURL partout quand on travaille avec des API. La documentation des API donne ses exemples en cURL, les outils de développement du navigateur proposent Copy as cURL sur n’importe quelle requête réseau, et les rapports de bug en contiennent souvent une pour que le problème puisse être reproduit à l’identique.
curl ajoute des parties de la requête que la commande n’écrit pas, et ce sont justement elles qui piègent. -d transforme un GET en POST et envoie Content-Type: application/x-www-form-urlencoded : un corps JSON sans Content-Type JSON arrive donc au serveur comme un formulaire. Plusieurs options -d sont reliées par &. -G déplace plutôt les données dans la query string, et -u user:password devient un en-tête Authorization de type Basic. L’analyseur affiche ces en-têtes et indique quelle option les a ajoutés.
Comment utiliser cet outil
- 1Collez une commande dans le panneau Command, ou choisissez-en une dans Examples. Les commandes copiées depuis Chrome ou Firefox fonctionnent telles quelles, y compris Copy as cURL (cmd) sous Windows avec ses échappements
^, et les commandes PowerShell avec des continuations de ligne par accent grave. - 2Lisez la requête dans l’onglet Request : la méthode et pourquoi curl l’utilise, l’URL découpée en parties, les paramètres de requête, les en-têtes, le corps (le JSON est mis en forme sans qu’aucune valeur ne change) et les options que l’analyseur liste sans les interpréter.
- 3Les notes en haut de l’onglet Request signalent ce qu’il vaut mieux savoir, comme un corps JSON envoyé en formulaire. Show, ou F8, place le curseur sur l’option concernée.
- 4Ouvrez l’onglet Code pour obtenir la même requête en JavaScript fetch, en Python requests ou en commande bash bien rangée sur plusieurs lignes, et copiez-la.
- 5Tidy (Shift+Alt+F) réécrit la commande de l’éditeur en bash, une option par ligne. Ctrl+Z l’annule.
Dépannage
- Guillemet simple non fermé, ou guillemet double non fermé
- Un guillemet s’ouvre et ne se ferme jamais, donc le reste de la commande est lu comme un seul argument. En bash, un guillemet simple ne peut pas apparaître dans '…' ; écrivez-le
'\''ou utilisez$'…'. L’éditeur marque l’endroit où le guillemet s’ouvre. - Aucune URL trouvée
- Chaque argument a été lu comme une option ou comme la valeur d’une option. Vérifiez que l’URL est bien là et pas dans un guillemet non fermé, et qu’une option comme
-oou-ua sa propre valeur avant l’URL. - Le corps ressemble à du JSON mais part en formulaire
-dsans Content-Type fait envoyer à curlapplication/x-www-form-urlencoded. Ajoutez-H "Content-Type: application/json", ou utilisez--json, qui règle à la fois Content-Type et Accept.- L’URL contient [ ] ou { }
- curl les traite comme un motif et envoie plusieurs requêtes, une par valeur. Ajoutez
-g(--globoff) pour les envoyer tels quels. - C’est une commande wget, pas curl
- L’analyseur ne lit que curl. Une commande copiée en PowerShell depuis le navigateur utilise
Invoke-WebRequest; choisissez plutôt Copy as cURL.
Questions fréquentes
Ma commande est-elle envoyée quelque part ?
Non. La commande est analysée dans votre navigateur et aucune requête n’est faite. C’est important, car les commandes copiées contiennent souvent de vrais jetons et cookies. La commande est conservée dans le session storage de cet onglet jusqu’à ce que vous l’effaciez ou fermiez l’onglet ; Copy link la place dans le lien après le # (jamais envoyé à un serveur), alors vérifiez qu’elle ne contient pas d’identifiants avant de la partager.
Quelles options cURL l’analyseur comprend-il ?
Celles qui modifient la requête : -X, -H, -d et ses variantes (--data-raw, --data-binary, --data-urlencode), --json, -F, -G, -I, -T, -u, -b, -A, -e, --oauth2-bearer, -L, -k, -m et --compressed. Les options courtes peuvent être combinées, comme dans -sSL, ou avoir leur valeur collée, comme dans -XPOST. Les autres options sont listées avec leur effet, et les options inconnues le sont aussi au lieu d’être ignorées.
Pourquoi affiche-t-il POST alors que ma commande n’a pas de -X ?
curl envoie un POST dès qu’une commande a un corps (-d, --json ou -F) sans méthode explicite, et l’analyseur suit la même règle. -G envoie plutôt les données en query string avec GET, et -I envoie HEAD.
Peut-il lire les fichiers référencés avec @, comme -d @body.json ?
Non. L’analyseur fonctionne dans le navigateur et ne peut pas lire les fichiers de votre ordinateur : il affiche donc le nom du fichier et une note. Collez le contenu du fichier avec --data-raw pour voir le corps.
Le code généré est-il exact ?
La méthode, l’URL, les en-têtes et le corps sont identiques, et le corps est envoyé comme la même chaîne, sans être réencodé. Certaines options de curl n’ont pas d’équivalent : fetch ne peut pas ignorer la vérification des certificats comme -k, et les navigateurs ne laissent pas fetch définir un en-tête Cookie. Le code généré le précise dans un commentaire là où c’est utile. Le code Python passe allow_redirects=False sauf si la commande contient -L, car curl ne suit pas les redirections par défaut.