Qual è la sintassi della riga di comando cURL per fare una richiesta POST?
Come posso fare una richiesta POST con lo strumento cURL della riga di comando?
Con campi:
curl --data "param1=value1¶m2=value2" https://example.com/resource.cgi
``` ```
curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi
Con campi specificati individualmente:
curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi
``` ```
curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi
Multipart:
curl --data '' https://example.com/resource.cgi
curl -X POST https://example.com/resource.cgi
curl --request POST https://example.com/resource.cgi
Multipart con campi e nome file:
curl --tr-encoding -X POST -v -# -o output -T filename.dat \
http://example.com/resource.cgi
Senza dati:
&001
Per ulteriori informazioni vedere il manuale cURL . Il tutorial cURL sull'emulazione di un browser web è utile.
Con libcurl, usare la funzione curl_formadd()
per costruire il modulo prima di inviarlo nel solito modo. Vedere la documentazione libcurl per maggiori informazioni.
Per i file di grandi dimensioni, considerare l'aggiunta di parametri per mostrare l'avanzamento dell'upload:
&001
Il -o output
è richiesto, altrimenti non apparirà alcuna barra di avanzamento.
Per un POST HTTP RESTful contenente XML:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"
o per JSON, utilizzare questo:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"
Questo leggerà il contenuto del file denominato filename.txt
e lo invierà come richiesta di posta.
Dati da stdin con -d @-
Esempio:
echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown
Uscita:
<p>Hello <strong>world</strong>!</p>
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi
è l'esempio che si trova nel Manuale di Esempio di Curl .
Usare %26 per gli amperand, però, se quanto sopra non funziona:
curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
Se si desidera effettuare il login in un sito, procedere come segue:
curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/
La prima richiesta salva il cookie di sessione (che viene fornito al momento del login con successo) nel file “headers”. D'ora in poi potete usare quel cookie per autenticarvi in qualsiasi parte del sito web a cui accedete di solito dopo aver effettuato il login con un browser.
curl -v --data-ascii var=value http://example.com
e ci sono molte altre opzioni, controllare curl --help
per ulteriori informazioni.
Se siete pigri, potete farvi fare tutto il lavoro da google-chrome o firefox.
Chrome copierà tutti i dati della richiesta in sintassi cURL.
Chrome utilizza --data 'param1=hello¶m2=world'
che si può rendere più leggibile utilizzando un singolo -d
o -F
per parametro a seconda del tipo di richiesta POST che si vuole inviare, che può essere sia application/x-www-form-urlencoded
o multipart/form-data
di conseguenza.
Questo sarà POST-ed come application/x-www-form-urlencoded
(usato per la maggior parte dei moduli che non contengono upload di file):
curl http://httpbin.org/post \
-H "User-Agent: Mozilla/2.2" \
-d param1=hello \
-d name=dinsdale
``` ```
curl http://httpbin.org/post \
-H "User-Agent: Mozilla/2.2" \
-F param1=hello \
-F name=dinsdale \
-F name=piranha
Per un POST multipart/form-data
usare -F
(tipicamente usato con i form che contengono upload di file, o dove l'ordine dei campi è importante, o dove sono richiesti più campi con lo stesso nome):
&001 &001
L'intestazione User-Agent
non è normalmente necessaria, ma l'ho gettata in caso di necessità. Se si ha bisogno di un agente personalizzato, si può evitare di impostarlo su ogni richiesta creando il file ~/.curlrc
che contiene ad esempio User-Agent: "Mozilla/2.2"