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


Comment puis-je faire un POSTER demande avec le boucle outil en ligne de commande?


2055
2017-09-17 15:39


origine




Réponses:


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 Didacticiel cURL sur l'émulation d'un navigateur Web est utile.

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

Pour les fichiers volumineux, envisagez d'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.


2385
2017-09-17 15:43



@LauriRanta --data-urlencode (pas de tiret), dans les versions récentes au moins - waitinforatrain
Fonctionne également si vous avez besoin de mettre à jour une ressource avec un PUT: curl -X PUT ... - Subfuzion
J'ai du mal à comprendre ... quand le ferais-je? With Fields, quand avec Multipart et quand Without Data? - CodyBugstein
Au lieu de --data vous pouvez utiliser -d. - user35538
J'ai un tableau de champs. Comment puis-je faire ceci? - ARUNBALAN NV


Pour un HTTP POST RESTful contenant 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 la demande de poste.


480
2018-03-10 08:29



@ explication tom-wijsman: curl -X POST implique une requête HTTP POST, le -d paramètre (version longue: --data) indique à curl que ce qui suit sera les paramètres POST, et @filename désigne le contenu du fichier filename en paramètre. Cette approche fonctionne mieux avec les API HTTP RESTful disponibles sur Twitter, Facebook, divers autres services Web, notamment Ruby on Rails, ainsi que les API HTTP de bases de données telles que CouchDB. REST signifie Transfert d'état représentationnel - soundmonster
Comment pouvons-nous voir la réponse xml pas dans une seule ligne mais formatée? - Vitaly Zdanevich
Je pense que vous pouvez laisser de côté -X POST puisque cela est impliqué par -d. - benjifisher
Comment donner plusieurs en-têtes? - keya
En-têtes multiples: curl -H "header2: 1" -H "header2: 2" ... - Tomáš Kratochvíla


Données de stdin: utilisation -d @-. Exemple:

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

Sortie:

<p>Hello <strong>world</strong>!</p>

118
2018-03-25 19:35



Génial si vous avez déjà un objet JSON dans le Presse-papiers - Luca Steeb
encore mieux: echo "$ message" | curl -H "Content-Type: application / json" -d @ - "$ url" - rzr


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 ce qui précède ne fonctionne pas:

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

64
2017-09-17 15:42





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". A partir de maintenant, vous pouvez utiliser ce cookie pour vous authentifier sur toute partie du site Web à laquelle vous accédez habituellement après vous être connecté avec un navigateur.


57
2018-03-04 02:21



une note de la page de manuel de curl: "L'option -c, --cookie-jar est cependant un meilleur moyen de stocker les cookies." - maxschlepzig


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

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


31
2017-09-17 15:43





Si vous êtes paresseux, vous pouvez obtenir Google-chrome pour faire tout le travail pour vous.

  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 le Réseau onglet dans devtools et cochez la Conserver journal case à cocher
  3. Soumettez le formulaire et recherchez l'entrée avec la méthode POST (cliquez avec le bouton droit de la souris sur un en-tête de colonne et vérifiez Méthode est vérifié).
  4. Cliquez avec le bouton droit sur la ligne avec POST et sélectionnez Copie > Copier comme cURL.

chrome devtools: copy as cURL

Chrome copiera toutes les données de 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 requête 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 comme application/x-www-form-urlencoded (utilisé pour la majorité des formulaires ne contenant pas de téléchargement de fichier):

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

Pour un multipart/form-data Utilisation POST -F (généralement utilisé avec les formulaires contenant des fichiers téléchargés, ou lorsque l'ordre des champs est important ou lorsque plusieurs champs portant 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

le User-Agent En-tête n'est normalement pas nécessaire, mais je l'ai jeté juste au cas où. Vous pouvez éviter d'avoir à définir l'agent utilisateur sur chaque requête en créant le ~/.curlrc fichier qui contient par exemple User-Agent: "Mozilla/2.2"


16
2017-09-29 08:06