2011-06-20 4 views
122

Ho bisogno di fare una richiesta POST tramite Curl dalla riga di comando. I dati per questa richiesta si trovano in un file. So che tramite PUT questo potrebbe essere fatto con l'opzione --upload-file.Invia richiesta POST con dati specificati nel file tramite Curl

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file" 
+0

Controllare la mia risposta, http://stackoverflow.com/questions/6213509/send-json-post- using-php/6213693 # 6213693 –

+1

Spiacente forse ho erroneamente descritto il mio problema, ho bisogno di inviare la richiesta non via php-curl ma solo tramite il comando curl da linea di comando da linux os. – user253202

+1

Vedere anche [inviare/pubblicare file xml utilizzando la riga di comando di arricciatura] (http://stackoverflow.com/questions/3007253/send-post-xml-file-using-curl-commandline). – Vadzim

risposta

195

Siete alla ricerca per l'argomento --data-binary:

curl -i -X POST host:port/post-file \ 
    -H "Content-Type: text/xml" \ 
    --data-binary "@path/to/file" 

Nell'esempio di cui sopra, -i stampe fuori tutte le intestazioni in modo che si può vedere cosa sta succedendo, e -X POST rende esplicito che questo è un post Entrambi possono essere omessi senza modificare il comportamento sul filo. Il percorso del file deve essere preceduto da un simbolo @, quindi curl sa leggere da un file.

+0

quale dovrebbe essere il formato di '@ percorso/su/file' –

+0

@ ɢʜʘʂʈʀɛɔʘɴ in questo caso sarebbe' .xml' – dennismonsewicz

+18

la parte '@' è estremamente importante! –

6

Se si sta utilizzando dati del modulo per caricare il file, in cui deve essere specificato il nome del parametro, è possibile utilizzare:

curl -X POST -i -F [email protected] host:port/xxx

+0

Grazie! La soluzione 1. non ha funzionato per me. 'parametername =' mi ha davvero aiutato :) – Cyborg

5

ho bisogno di fare una richiesta POST tramite Curl dal comando linea. I dati per questa richiesta si trovano in un file ...

Altre risposte sembrano inutili complicate. Tutto quello che devi fare è avere inizio l'argomento --data con un @:

curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file 

Ad esempio, se si hanno i dati in un file chiamato stuff.xml allora si dovrebbe fare qualcosa di simile:

curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file 

Il stuff.xml nome del file può essere sostituito con un percorso relativo o completo del file da utilizzare: @./xml/stuff.xml, @/var/tmp/stuff.xml, ...