2011-06-20 4 views
122

Мне нужно сделать запрос POST через Curl из командной строки. Данные для этого запроса находятся в файле. Я знаю, что через PUT это можно сделать с помощью опции --upload-file.Отправить запрос POST с данными, указанными в файле через Curl

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

Проверьте мой ответ, http://stackoverflow.com/questions/6213509/send-json-post- using-php/6213693 # 6213693 –

+1

Простите, может быть, я ошибочно описал свою проблему, мне нужно отправить запрос не через php-curl, а только через команду curl из командной строки из linux os. – user253202

+1

См. Также [отправить/отправить файл xml с помощью командной строки curl] (http://stackoverflow.com/questions/3007253/send-post-xml-file-using-curl-command-line). – Vadzim

ответ

195

Вы ищете --data-binary аргумент:

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

В приведенном выше примере, -i выводит все заголовки, так что вы можете увидеть, что происходит, и -X POST делает его явным, что это это сообщение. Оба они могут быть безопасно опущены без изменения поведения на проводе. Путь к файлу должен предшествовать символ @, поэтому curl знает, как читать из файла.

+0

Какой должен быть формат '@ path/to/file' –

+0

@ ɢʜʘʂʈʀɛɔʘɴ, в этом случае это будет' .xml' – dennismonsewicz

+18

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' чрезвычайно важная! –

6

Если вы используете данные формы для загрузки файла, в котором должны быть указаны имя параметра, вы можете использовать:

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

+0

Спасибо! 1. Решение не сработало для меня. 'parametername =' действительно помог мне :) – Cyborg

5

Мне нужно сделать запрос POST с помощью Curl из команды линия. Данные для этого запроса находятся в файле ...

Другие ответы кажутся излишними сложными. Все, что вам нужно сделать, это иметь --data аргумент начать с @:

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

Например, если у вас есть данные в файле с именем stuff.xml тогда вы могли бы сделать что-то вроде:

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

stuff.xml имени файла может быть заменено с относительным или полным путем к файлу использовать: @./xml/stuff.xml, @/var/tmp/stuff.xml ...

Смежные вопросы