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 "[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.
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.
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
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.
curl -v --data-ascii var=value http://example.com
et il y a beaucoup plus d'options, consultez curl --help
pour plus d'informations.
Si vous êtes paresseux, vous pouvez demander à Google Chrome 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, 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"