2011-06-20 8 views
122

Potrzebuję wykonać żądanie POST przez Curl z wiersza poleceń. Dane do tego żądania znajdują się w pliku. Wiem, że poprzez PUT można to zrobić za pomocą opcji --upload-file.Wyślij żądanie POST z danymi określonymi w pliku przez Curl

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

Sprawdź moją odpowiedź, http://stackoverflow.com/questions/6213509/send-json-post- using-php/6213693 # 6213693 –

+1

Przepraszam, może omyłkowo opisałem mój problem, muszę wysłać prośbę nie poprzez php-curl, ale po prostu za pomocą polecenia curl z linii poleceń z linux os. – user253202

+1

Zobacz także [wyślij/wyślij plik xml za pomocą linii poleceń curl] (http://stackoverflow.com/questions/3007253/send-post-xml-file-using-curl-command-line). – Vadzim

Odpowiedz

195

Patrzysz na --data-binary argumentu:

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

W powyższym przykładzie, -i drukuje wszystkie nagłówki, dzięki czemu można zobaczyć, co się dzieje, a -X POST czyni to wyraźnie zaznaczyć, że ten jest postem. Oba można bezpiecznie pominąć bez zmiany zachowania na drucie. Ścieżka do pliku musi być poprzedzona symbolem @, więc curl wie, aby odczytać z pliku.

+0

jaki powinien być format '@ ścieżka/do/pliku' –

+0

@ ɢʜʘʂʈʀɛɔʘɴ w tym przypadku będzie to' .xml' – dennismonsewicz

+18

część '@ 'jest niezwykle ważna! –

6

Jeśli używasz danych z formularza, aby przesłać plik, w którym nazwa parametr musi być określony, można użyć:

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

+0

Dziękujemy! 1. rozwiązanie nie działa dla mnie. 'parametername =' naprawdę mi pomogło :) – Cyborg

5

muszę dokonać żądania POST poprzez Curl z polecenia linia. Dane do tego żądania znajdują się w pliku ...

Inne odpowiedzi wydają się niepotrzebne. Wszystko, co musisz zrobić, to mieć --data argumentem zacząć z @:

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

Na przykład, jeśli masz dane w pliku o nazwie stuff.xml wtedy można zrobić coś takiego:

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

stuff.xml nazwa pliku może być zastąpiona względną lub pełną ścieżką do pliku do użycia: @./xml/stuff.xml, @/var/tmp/stuff.xml, ...