Qual è la sintassi della riga di comando cURL per eseguire una richiesta POST?


2187

Come posso effettuare una richiesta POST con lo strumento da riga di comando cURL ?


curl -d "param1=value1&param2=value2" -X POST http://localhost:3000/data
svikramjeet,

Risposte:


2542

Con campi:

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

Con i campi specificati individualmente:

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 con campi e un nome file:

curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

Senza dati:

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

Per ulteriori informazioni consultare il manuale di cURL . Il tutorial cURL sull'emulazione di un browser web è utile.

Con libcurl, utilizzare la curl_formadd()funzione per compilare il modulo prima di inviarlo nel solito modo. Consulta la documentazione di libcurl per ulteriori informazioni.

Per file di grandi dimensioni, considera l'aggiunta di parametri per mostrare l'avanzamento del caricamento:

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

Il -o outputè necessaria, altrimenti verrà visualizzata alcuna barra di avanzamento.


7
@LauriRanta --data-urlencode(no dash), almeno nelle ultime versioni
waitinforatrain,

4
Funziona anche se è necessario aggiornare una risorsa con un PUT: curl -X PUT ...
Subfuzion

3
Ho difficoltà a capire ... quando lo farei With Fields, quando con Multiparte quando Without Data?
CodyBugstein,

7
Invece di --datate puoi usare -d.
user35538

ho una serie di campi. come posso fare questo?
ARUNBALAN NV

507

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.txte lo invierà come richiesta di post.


13
@ spiegazione di tom-wijsman: curl -X POSTimplica una richiesta POST HTTP, il -dparametro (versione lunga :) --datadice al ricciolo che quelli che seguono saranno parametri POST e @filenamedesigna il contenuto del file filenamecome parametro. Questo approccio funziona al meglio con le API HTTP RESTful presenti su Twitter, Facebook, vari altri servizi Web tra cui Ruby on Rails e API HTTP di database come CouchDB. REST è l'acronimo di Rappresentational state transfer
soundmonster,

1
Come possiamo vedere la risposta XML non in una riga ma formattata?
Vitaly Zdanevich,

6
Penso che tu possa lasciar perdere -X POSTciò che è implicito da -d.
benjifisher,

Come dare più intestazioni?
keya,

Intestazioni multiple: ricciolo -H "header2: 1" -H "header2: 2" ...
Tomáš Kratochvíla


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

è l'esempio trovato nel Manuale di esempio Curl .

Utilizzare% 26 per le e commerciali, tuttavia se quanto sopra non funziona:

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

61

Se desideri accedere a un sito, procedi 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 dopo un accesso riuscito) nel file "headers". D'ora in poi puoi utilizzare quel cookie per autenticarti in qualsiasi parte del sito web a cui accedi di solito dopo aver effettuato l'accesso con un browser.


6
una nota dalla pagina man di curl: "L'opzione -c, --cookie-jar è comunque un modo migliore per conservare i cookie".
Maxschlepzig,

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

e ci sono molte altre opzioni, controlla curl --helpper ulteriori informazioni.


27

Se sei pigro, puoi ottenere google-chrome per fare tutto il lavoro per te.

  1. Fare clic con il tasto destro del mouse sul modulo che si desidera inviare e selezionare Ispeziona . Questo aprirà il pannello DevTools.
  2. Seleziona la scheda Rete in devtools e seleziona la casella di controllo Mantieni registro .
  3. Invia il modulo e individua la voce con il metodo POST (fai clic con il pulsante destro del mouse su qualsiasi intestazione di colonna e assicurati che Metodo sia selezionato).
  4. Fare clic con il tasto destro del mouse sulla riga con POST e selezionare Copia > Copia come cURL .

chrome devtools: copia come cURL

Chrome copierà tutti i dati della richiesta nella sintassi cURL.

Chrome utilizza ciò --data 'param1=hello&param2=world'che è possibile rendere più leggibile utilizzando un singolo parametro -do -Fper parametro a seconda del tipo di richiesta POST che si desidera inviare, che può essere o application/x-www-form-urlencodedo di multipart/form-dataconseguenza.

Verrà pubblicato come POST application/x-www-form-urlencoded( utilizzato per la maggior parte dei moduli che non contengono caricamenti di file ):

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

Per un multipart/form-datauso POST -F( generalmente utilizzato con moduli che contengono caricamenti di file o in cui l'ordine dei campi è importante o in cui sono richiesti più campi con lo stesso nome ):

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

L' User-Agentintestazione non è normalmente necessaria, ma l'ho buttata per ogni evenienza. È possibile evitare di impostare l'agente utente su ogni richiesta creando il ~/.curlrcfile che contiene ad esUser-Agent: "Mozilla/2.2"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.