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 ?
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.
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.
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 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
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.
curl -v --data-ascii var=value http://example.com
et il existe de nombreuses autres options, consultez curl --help
pour plus d'informations.
Si vous êtes paresseux, vous pouvez demander à google-chrome ou firefox de faire tout le travail à votre place.
Chrome copiera toutes les données de la demande dans la syntaxe cURL.
Chrome utilise --data 'param1=hello¶m2=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"