2406 votes

Quelle est la syntaxe de la ligne de commande cURL pour effectuer une requête POST ?

Comment puis-je faire un POST avec le cURL outil en ligne de commande ?

2783voto

Stephen Deken Points 27889

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 "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 site Tutoriel cURL sur l'émulation d'un navigateur web est utile.

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

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

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

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

10 votes

@LauriRanta --data-urlencode (sans tiret), du moins dans les versions récentes

6 votes

Cela fonctionne également si vous devez mettre à jour une ressource avec un PUT : curl -X PUT ...

5 votes

J'ai du mal à comprendre... Quand est-ce que je le ferais ? With Fields quand avec Multipart et quand Without Data ?

553voto

soundmonster Points 5581

Pour un RESTful HTTP POST 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 va lire le contenu du fichier nommé filename.txt et l'envoyer comme demande de poste.

17 votes

@tom-wijsman explication : curl -X POST implique une demande HTTP POST, le -d paramètre (version longue : --data ) indique à curl que ce qui suit sera des paramètres POST, et @filename désigne le contenu du fichier filename comme paramètre. Cette approche fonctionne mieux avec les API HTTP RESTful, comme celles de Twitter, de Facebook, de divers autres services Web, y compris Ruby on Rails, ainsi que les API HTTP de bases de données telles que CouchDB. REST est l'abréviation de Transfert d'état représentationnel

2 votes

Comment voir la réponse xml non pas en une seule ligne mais formatée ?

11 votes

Je pense que tu peux laisser de côté le -X POST puisque cela est impliqué par -d .

161voto

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>

9 votes

Idéal si vous avez déjà un objet JSON dans le presse-papiers.

1 votes

Encore mieux : echo "$message" | curl -H "Content-Type : application/json" -d @- "$url"

76voto

Matt Stine Points 61
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

est l'exemple trouvé dans le Manuel d'exemple de curl .

Utilisez %26 pour les esperluettes si la méthode ci-dessus ne fonctionne pas :

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

69voto

Martin Konecny Points 1197

Si vous voulez 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 lors d'une connexion réussie) dans le fichier "headers". À partir de maintenant, vous pouvez utiliser ce cookie pour vous authentifier dans n'importe quelle partie du site Web à laquelle vous accédez habituellement après vous être connecté avec un navigateur.

9 votes

Une note de la page de manuel de curl : L'option -c, --cookie-jar est cependant une meilleure façon de stocker les cookies.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X