Générateur de commande curl
Indiquez la méthode HTTP, l'URL, les en-têtes, le corps et le mode d'authentification dans le formulaire pour générer une commande curl prête à copier et exécuter. Aucune requête n'étant réellement envoyée, les restrictions CORS ne s'appliquent jamais.
Options curl les plus courantes
| Option | Description |
|---|---|
| -X, --request <method> | Indique la méthode HTTP (GET, POST, PUT, PATCH, DELETE, etc.). Si elle est omise, GET est utilisé sans corps et POST lorsqu'un corps est présent. |
| -H, --header <header> | Ajoute un en-tête de requête. Répétez -H pour en ajouter plusieurs. |
| -d, --data <data> | Envoie un corps de requête. Si -X n'est pas précisé, l'envoi se fait automatiquement en POST avec Content-Type: application/x-www-form-urlencoded. |
| -u, --user <user:password> | Indique le nom d'utilisateur et le mot de passe pour l'authentification Basic au format "user:password". |
| -k, --insecure | Ignore la vérification du certificat SSL. Destiné aux environnements de développement utilisant des certificats auto-signés. Déconseillé en production. |
| -L, --location | Suit automatiquement la destination indiquée par l'en-tête Location lorsque le serveur renvoie une redirection 3xx. |
| -v, --verbose | Affiche l'échange détaillé de la requête et de la réponse, en-têtes compris, sur la sortie d'erreur standard. Utile pour le débogage. |
| --compressed | Ajoute un en-tête Accept-Encoding, demandant et décompressant automatiquement les réponses compressées avec gzip ou des formats similaires. |
| -o, --output <file> | Enregistre le corps de la réponse dans le fichier indiqué au lieu de la sortie standard. |
| -F, --form <name=content> | Envoie des données de formulaire ou des fichiers au format multipart/form-data. Indiquez "@chemin_du_fichier" pour l'envoi de fichiers. |
Composer une commande curl depuis un formulaire
Indiquez dans le formulaire la méthode, l'adresse, les en-têtes, le corps et l'authentification, et il en sort une commande curl prête à coller dans un terminal. **Cet outil n'envoie jamais réellement la requête : il n'est donc pas lié par les restrictions CORS du navigateur.** La commande se compose même pour une API qui refuserait une requête émise depuis une page.
**Ce qui fait trébucher avec curl, c'est le rapport entre la méthode et le corps.** Joignez un corps avec `-d` et **la méthode devient POST d'elle-même, quand bien même vous n'en auriez écrit aucune.** Vouloir envoyer un PUT ou un PATCH en ne fournissant que `-d` lance donc un POST non voulu. L'autre erreur fréquente consiste à envoyer du JSON en oubliant `Content-Type: application/json` ; curl l'expédie alors comme `application/x-www-form-urlencoded`, et **le serveur ne le lit nullement comme du JSON.** En collant la commande produite dans un terminal, prenez garde aussi aux guillemets de l'interpréteur : **dans des apostrophes les variables ne sont pas substituées, dans des guillemets doubles elles le sont.**
Comment s'en servir
- Indiquez la méthode et l'adresse Choisissez GET pour récupérer et POST pour envoyer.
- Ajoutez vos en-têtes **Si vous envoyez du JSON, n'oubliez pas `Content-Type: application/json`.**
- Écrivez le corps **Joindre un corps rend la méthode POST d'elle-même là où aucune n'était indiquée.**
- Recopiez la commande et exécutez-la La coller dans un terminal suffit.
Astuces pour en tirer le meilleur parti
- La commande générée peut être collée directement dans un terminal, un script shell ou un fichier de configuration CI/CD et exécutée telle quelle. Toutes les valeurs sont déjà échappées avec des guillemets simples.
- Un avertissement s'affiche si vous saisissez un corps alors que la méthode est encore GET. En effet, curl envoie automatiquement la requête en POST lorsque
-dest utilisé sans-X; cet avertissement permet d'éviter un comportement inattendu. - En cochant « Ajouter automatiquement Content-Type: application/json », l'en-tête Content-Type, souvent oublié lors de l'appel d'une API JSON, est ajouté automatiquement.
- Les valeurs saisies pour l'authentification Basic comme pour le jeton Bearer sont traitées entièrement dans votre navigateur et ne sont jamais envoyées à un serveur.
- Le
-kgénéré (ignorer la vérification du certificat) n'est qu'une solution de contournement temporaire réservée au développement local avec des certificats auto-signés. Évitez de l'utiliser durablement face à des API de production.
Dans quels cas s'en servir
Pour éprouver le comportement d'une API
**Une API qu'on ne peut appeler depuis le navigateur s'essaie tout de même avec curl, sans que CORS y fasse obstacle.**
Pour inscrire une commande dans une procédure
Vous consignez en quoi consiste une requête sous une forme que chacun peut reproduire.
Pour partager les étapes d'une reproduction de panne
**Remettre à quelqu'un une commande à exécuter donne une reproduction bien moins affectée par les écarts d'environnement.**
Pour apprendre les options de curl
Vous voyez en quelle option se change chaque champ du formulaire.
Vocabulaire de curl
- -X
- Indique expressément la méthode. **`-d` la rendant POST même sans indication, c'est ce qu'il faut pour PUT ou DELETE.**
- -H
- Ajoute un en-tête. Écrit plusieurs fois, il en joint autant.
- -d
- Indique le corps de la requête. **L'écrire rend la méthode POST, et le type de contenu par défaut devient l'encodage de formulaire.**
- -u
- Indique le nom d'utilisateur et le mot de passe de l'authentification de base, écrits `utilisateur:motdepasse`.
- Jeton Bearer
- Le procédé envoyant les identifiants sous la forme `Authorization: Bearer ...`. Quantité d'API adoptent cette forme.
- -i et -v
- Affichent les en-têtes de réponse et le détail de l'échange. **L'un comme l'autre gagnent leur place quand rien ne fonctionne.**
Questions fréquentes
-d (données du corps) sans l'option -X, il envoie automatiquement la requête en POST. Dans le cas rare où vous devez conserver GET tout en envoyant un corps, ajoutez manuellement -X GET à la commande générée.
Anecdote — pourquoi curl est l'outil que tout le monde utilise sans presque jamais le connaître
curl est un outil en ligne de commande permettant de transférer des données via des URL, créé en 1996 par l'ingénieur suédois Daniel Stenberg. Il est né d'un petit script destiné à récupérer des taux de change pour un bot de discussion IRC, avant de devenir un projet gigantesque prenant en charge plus de 25 protocoles, dont HTTP, FTP et SMTP.
curl est considéré comme l'un des logiciels les plus utilisés au monde. Il est intégré dans pratiquement tous les appareils connectés à internet — smartphones, voitures, appareils électroménagers, consoles de jeux et même sondes spatiales (il a notamment été utilisé lors de missions de la NASA vers Mars) — avec un parc installé estimé à plusieurs dizaines de milliards d'unités. Malgré cette omniprésence, il reste un exemple classique d'infrastructure invisible, quasiment inconnue en dehors des cercles de développeurs.
En 2019, Stenberg a été distingué par la Linux Foundation pour ses contributions aux technologies fondamentales du Web. Il demeure aujourd'hui le mainteneur principal à la tête du développement de curl, réputé pour avoir su préserver avec soin la compatibilité ascendante pendant plus de vingt ans.
Même aujourd'hui, alors que des outils graphiques comme Postman se sont largement répandus, les commandes curl continuent d'être utilisées dans les README, la documentation officielle et les étapes de vérification des API. La raison est simple : curl ne nécessite aucune installation et est préinstallé sur presque tous les environnements Linux et macOS, ce qui permet d'exécuter une seule commande sur-le-champ et d'en partager le résultat, avec un niveau de reproductibilité difficile à égaler.