Invia richiesta POST con i dati specificati nel file tramite Curl


242

Devo 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' --upload-fileopzione.

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


1
Scusate forse ho descritto erroneamente il mio problema, devo inviare la richiesta non tramite php-curl ma solo tramite il comando curl dalla riga di comando da Linux OS.
razza

Risposte:


364

Stai cercando l' --data-binaryargomento:

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

Nell'esempio sopra, -istampa tutte le intestazioni in modo da poter vedere cosa sta succedendo e -X POSTrende esplicito che si tratta di un post. Entrambi possono essere tranquillamente omessi senza modificare il comportamento sul filo. Il percorso del file deve essere preceduto da un @simbolo, quindi curlsa leggere da un file.


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

54
la @parte è estremamente importante!
Ron Klein,

Quindi usiamo il parametro --data-binary, ma il contenuto del file effettivo può essere testo? Poiché XML non è in genere binario.
David,

8
in realtà puoi usare solo -d flag
Anatoly Yakimchuk

16
@ Tol182 -dcauserà curllo strip di nuove righe, ma --data-binarynon lo farà.
Acumenus,

45

Devo fare una richiesta POST tramite Curl dalla riga di comando. I dati per questa richiesta si trovano in un file ...

Tutto quello che devi fare è far --datainiziare l' argomento con un @:

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

Ad esempio, se hai i dati in un file chiamato, stuff.xmldovresti fare qualcosa del tipo:

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

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


2
Nel caso in cui sia necessario inviare un campo con nome, è anche possibile utilizzare --data "name@stuff".
Hermann,

15

Se si utilizzano i dati del modulo per caricare il file, in cui è necessario specificare un nome parametro, è possibile utilizzare:

curl -X POST -i -F "parametername=@filename" -F "additional_parm=param2" host:port/xxx


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

3

La maggior parte delle risposte sono perfette qui, ma quando sono arrivato qui per il mio problema specifico, devo caricare il file binario (foglio di calcolo XLSX) usando il metodo POST, vedo una cosa che manca , cioè di solito non è solo il file che carichi, potresti avere più elementi di dati del modulo , come commenti a file o tag a file ecc. come nel mio caso. Quindi, vorrei aggiungerlo qui perché era il mio caso d'uso, in modo che potesse aiutare gli altri.

curl -POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url

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.