2008-09-17 15:39:01 +0000 2008-09-17 15:39:01 +0000
2240
2240

Quelle est la syntaxe de la ligne de commande cURL pour effectuer une demande POST ?

Comment puis-je effectuer une demande POST avec l'outil de ligne de commande cURL ?

Réponses (7)

2607
2607
2607
2008-09-17 15:43:28 +0000

Avec des champs :

curl --data "param1=value1¶m2=value2" https://example.com/resource.cgi

Avec des champs spécifiés individuellement :

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

Multipart :

curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi

Multipart avec des champs et un nom de fichier :

curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

Sans données :

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

Pour plus d'informations, voir le manuel CURL . Le tutoriel le manuel cURL sur l'émulation d'un navigateur web est utile.

Avec libcurl, utilisez la fonction curl_formadd() pour construire votre formulaire avant de le soumettre de la manière habituelle. Voir la documentation libcurl pour plus d'informations.

Pour les fichiers volumineux, pensez à ajouter des paramètres pour afficher la progression du téléchargement :

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

Le -o output est nécessaire, sinon aucune barre de progression n'apparaîtra.

517
517
517
2011-03-10 08:29:31 +0000

Pour un POSTE HTTP RESTANT contenant du XML :

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"

ou pour JSON, utilisez ceci :

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"

Cela permettra de lire le contenu du fichier nommé filename.txt et de l'envoyer comme demande de poste.

137
137
137
2014-03-25 19:35:44 +0000

Données de stdin avec -d @-

Exemple :

echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown

Sortie :

<p>Hello <strong>world</strong>!</p>
69
69
69
2008-09-17 15:42:15 +0000
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi

est l'exemple que l'on trouve dans le Curl Example Manual .

Utilisez toutefois %26 pour les esperluettes si ce qui précède ne fonctionne pas :

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
63
63
63
2012-03-04 02:21:37 +0000

Si vous souhaitez vous connecter à un site, procédez comme suit :

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

La première demande enregistre le cookie de session (qui est fourni lorsque la connexion est réussie) dans le fichier “headers”. Vous pouvez désormais utiliser ce cookie pour vous authentifier sur n'importe quelle partie du site web auquel vous accédez habituellement après vous être connecté avec un navigateur.

35
35
35
2008-09-17 15:43:02 +0000
curl -v --data-ascii var=value http://example.com

et il existe de nombreuses autres options, consultez curl --help pour plus d'informations.

33
33
33
2017-09-29 08:06:57 +0000

Si vous êtes paresseux, vous pouvez demander à google-chrome ou firefox de faire tout le travail à votre place.

  1. Faites un clic droit sur le formulaire que vous souhaitez soumettre et sélectionnez Inspect (ou Inspect Element pour Firefox). Cela ouvrira le panneau DevTools.
  2. Sélectionnez l'onglet Network dans devtools et cochez la case Preserve log ( Persist Logs pour Firefox).
  3. Soumettez le formulaire et localisez l'entrée avec la méthode POST (cliquez avec le bouton droit de la souris sur n'importe quel en-tête de colonne et assurez-vous que Method est coché).
  4. Faites un clic droit sur la ligne avec POST, et sélectionnez Copy > Copy as cURL.

Chrome copiera toutes les données de la demande dans la syntaxe cURL.

Chrome utilise --data 'param1=hello&param2=world' que vous pouvez rendre plus lisible en utilisant un seul -d ou -F par paramètre selon le type de demande POST que vous voulez envoyer, qui peut être soit application/x-www-form-urlencoded soit multipart/form-data en conséquence.

Ce sera POST-ed comme application/x-www-form-urlencoded (utilisé pour la majorité des formulaires qui ne contiennent pas de téléchargement de fichiers) :

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -d param1=hello \
    -d name=dinsdale

Pour un multipart/form-data POST utiliser -F (typiquement utilisé avec les formulaires qui contiennent des téléchargements de fichiers, ou lorsque l'ordre des champs est important, ou lorsque plusieurs champs avec le même nom sont requis) :

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -F param1=hello \
    -F name=dinsdale \
    -F name=piranha

L'en-tête User-Agent n'est normalement pas nécessaire, mais je l'ai ajouté juste au cas où. Si vous avez besoin d'un agent personnalisé, vous pouvez éviter de le définir à chaque demande en créant le fichier ~/.curlrc qui contient par exemple User-Agent: "Mozilla/2.2"