Générateur et convertisseur de commandes curl
Créez des commandes curl et convertissez-les en fetch, Python et HTTPie.
À propos de cet outil
Renseignez la méthode, l’URL, les en-têtes, le corps et l’authentification pour obtenir une commande curl prête à l’emploi, ou collez une commande curl existante pour la modifier. Chaque requête est aussi affichée en fetch JavaScript, Python requests et HTTPie. Rien n’est envoyé : l’outil se contente d’écrire les commandes.
Mode d’emploi
- Collez une commande curl existante pour l’importer, par exemple depuis les outils de développement de votre navigateur (Copier en tant que cURL).
- Ou définissez la méthode et l’URL, puis ajoutez les en-têtes, l’authentification et un corps JSON, formulaire ou brut.
- Choisissez des options comme suivre les redirections ou afficher les en-têtes de réponse.
- Copiez le résultat en curl, fetch JavaScript, Python requests ou HTTPie.
Questions
- Comment envoyer du JSON avec curl ?
- Utilisez -H 'Content-Type: application/json' avec --data-raw '{"key":"value"}'. Les versions récentes de curl proposent aussi --json, qui définit pour vous les en-têtes Content-Type et Accept. Choisissez JSON comme type de corps ici et les bonnes options sont ajoutées.
- Cet outil envoie-t-il ma requête ?
- Non. Il se contente d’écrire du code. Rien ne quitte votre navigateur : vous pouvez donc coller des commandes contenant des jetons, même s’il est recommandé de remplacer les vrais secrets par des valeurs fictives avant de partager une commande.
- Quelle est la différence entre -d et --data-raw ?
- Avec -d, une valeur commençant par @ est lue depuis un fichier. --data-raw envoie le texte exactement tel qu’il est écrit, ce qui est plus sûr pour du JSON et pour des valeurs susceptibles de commencer par @.
- Pourquoi curl ne suit-il pas les redirections ?
- Par défaut, curl affiche la réponse de redirection elle-même. Ajoutez -L (Suivre les redirections) pour aller vers la nouvelle adresse. fetch et la plupart des bibliothèques suivent les redirections automatiquement.
- Quelles options de curl peuvent être importées ?
- La méthode, l’URL, les en-têtes, les options de données, --json, -u, le user agent, les cookies, le referer, -G, -L, -i, -s, -k, -v, --head et --compressed. Les champs multipart -F et les autres options rares sont ignorés, avec une remarque.
- Comment envoyer des données de formulaire avec curl ?
- curl -d "name=Ada&role=admin" URL envoie un formulaire encodé en URL et passe de lui-même la méthode en POST. Utilisez --data-urlencode "q=hello world" quand une valeur contient des espaces ou des symboles. Les envois de fichiers nécessitent un multipart -F "file=@photo.jpg", que cet outil ignore à l’import : ajoutez-le donc à la main.
- Comment ajouter des paramètres de requête à une requête GET avec curl ?
- Placez-les dans l’URL et entourez toute l’URL de guillemets doubles, car & et ? ont une signification pour le shell. Ou gardez-les à part avec -G --data-urlencode "q=red shoes", qui ajoute les valeurs encodées à l’URL au lieu d’envoyer un corps. L’import ici comprend -G et déplace les valeurs dans l’URL.
- Comment voir les en-têtes de réponse avec curl ?
- -i affiche la ligne de statut et les en-têtes avant le corps. -I (--head) envoie une requête HEAD et n’affiche que les en-têtes, mais certains serveurs répondent différemment à HEAD et à GET. -v affiche aussi les en-têtes de la requête, ainsi que la négociation TLS, ce qui aide à déboguer les redirections, l’authentification ou les erreurs de certificat.
Comment convertir une commande curl en Python requests ?
Collez la commande curl dans la zone d’import et choisissez Python. Les en-têtes deviennent un dict, un corps JSON devient json=payload pour que requests le sérialise et définisse le Content-Type, et les corps de formulaire ou bruts deviennent data=payload. L’authentification Basic de -u devient auth=(user, password), et -k devient verify=False. Un token Bearer reste dans les en-têtes sous forme d’entrée Authorization.
Deux lignes peuvent surprendre. requests suit les redirections par défaut alors que curl ne le fait pas : le code ajoute donc allow_redirects=False sauf si la commande curl contenait -L. requests n’a pas non plus de délai d’expiration par défaut et peut attendre indéfiniment un serveur bloqué : timeout=30 est donc ajouté. Gardez-le ou modifiez la valeur. La même requête est aussi disponible en fetch JavaScript et en HTTPie en un clic.
Pourquoi une requête fonctionne-t-elle avec curl mais pas avec fetch ?
La cause habituelle est CORS. curl envoie la requête et affiche ce qui revient, mais un navigateur ne laisse votre page lire une réponse cross-origin que si le serveur l’autorise avec Access-Control-Allow-Origin. Les navigateurs refusent aussi de définir certains en-têtes, comme Cookie et Host, depuis le code. Le même code fetch exécuté dans Node ne subit aucun contrôle CORS : il se comporte donc comme curl.
Pour obtenir un point de départ fonctionnel, ouvrez l’onglet Réseau des outils de développement de votre navigateur, faites un clic droit sur la requête et choisissez Copier en tant que cURL. Sous Windows, prenez la variante bash, car la variante cmd utilise un autre style d’échappement. La commande copiée contient de nombreux en-têtes de navigateur rarement utiles, comme sec-ch-ua et de longs cookies : supprimez-les dans la liste des en-têtes avant la conversion.
HTTPie ou curl : comparaison des syntaxes
curl est installé presque partout, y compris sur macOS et sur Windows 10 et versions ultérieures. HTTPie (la commande http) a une syntaxe plus courte et colore la sortie. Les en-têtes s’écrivent Name:value sans -H, les champs de formulaire name=value avec --form, --follow remplace -L, et --verify=no remplace -k. La commande HTTPie générée transmet les corps JSON via une here-string, ce qui fonctionne dans bash et zsh mais pas dans PowerShell.
Pour l’authentification Basic, curl -u user:password et HTTPie -a user:password construisent tous deux l’en-tête Authorization pour vous. Les identifiants sont seulement encodés en Base64, pas chiffrés, comme le montre l’outil Encodage / décodage Base64 : envoyez-les donc toujours en HTTPS. Pour les tokens, curl utilise -H "Authorization: Bearer TOKEN" et HTTPie -A bearer -a TOKEN. Quand vous importez une commande curl, un en-tête Bearer est automatiquement déplacé dans les champs Auth.
Quelque chose ne fonctionne pas, ou un résultat semble faux ? Signaler un problème avec cet outil