web-dev-qa-db-fra.com

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

Comment puis-je faire une requête POST avec l'outil de ligne de commande cURL ?

2119
Laurie Young

Avec des champs:

curl --data "param1=value1&param2=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 "[email protected]" https://example.com/resource.cgi

Multipart avec des champs et un nom de fichier:

curl --form "[email protected];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 didacticiel cURL sur l’émulation d’un navigateur Web est utile.

Avec libcurl, utilisez la fonction curl_formadd() pour créer 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 requis, sinon aucune barre de progression n'apparaîtra.

2462
Stephen Deken

Pour un HTTP POST RESTful 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 lira le contenu du fichier nommé filename.txt et l’enverra en tant que demande de publication.

496
soundmonster

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>
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

est l'exemple trouvé dans le Curl Example Manual .

Utilisez% 26 pour les esperluettes si cela ne fonctionne pas:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 
65
Patrick Desjardins

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 (fourni lors d'une connexion réussie) dans le fichier "en-têtes". À partir de maintenant, vous pouvez utiliser ce cookie pour vous authentifier auprès de n’importe quelle partie du site Web à laquelle vous accédez habituellement après votre connexion à un navigateur.

58
Martin Konecny
curl -v --data-ascii var=value http://example.com

et il y a beaucoup plus d'options, consultez curl --help pour plus d'informations.

32
Vinko Vrsalovic

Si vous êtes paresseux, vous pouvez demander à Google Chrome de faire tout le travail à votre place.

  1. Cliquez avec le bouton droit sur le formulaire que vous souhaitez soumettre et sélectionnez Inspecter . Cela ouvrira le panneau DevTools.
  2. Sélectionnez l'onglet Réseau dans devtools et cochez la case Conserver le journal .
  3. Soumettez le formulaire et localisez l'entrée avec la méthode POST (cliquez avec le bouton droit de la souris sur un en-tête de colonne et assurez-vous que Méthode est cochée).
  4. Cliquez avec le bouton droit sur la ligne avec POST et sélectionnez Copier > Copier en tant que cURL .

 chrome devtools: 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, en fonction du type de demande POST que vous souhaitez envoyer, qui peut être soit application/x-www-form-urlencoded ou multipart/form-data en conséquence.

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

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

Pour un multipart/form-data POST, utilisez -F (généralement utilisé avec des formulaires contenant des fichiers téléchargés, ou lorsque l'ordre des champs est important, ou lorsque plusieurs champs du même nom sont obligatoires} _):

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 jeté au cas où. Vous pouvez éviter de définir l'agent utilisateur pour chaque demande en créant le fichier ~/.curlrc qui contient par exemple User-Agent: "Mozilla/2.2"

20
ccpizza