Отправить запрос на cURL с данными публикации, полученными из файла

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

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

person breedish    schedule 20.06.2011    source источник
comment
Проверьте мой ответ, stackoverflow.com/questions / 6213509 / send-json-post-using-php /   -  person Muhammad Zeeshan    schedule 20.06.2011
comment
Извините, возможно, я ошибочно описал свою проблему, мне нужно отправить запрос не через php-curl, а просто через команду curl из командной строки из ОС Linux.   -  person breedish    schedule 20.06.2011
comment


Ответы (5)


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

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

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

person Richard J    schedule 20.06.2011
comment
@ ɢʜʘʂʈʀɛɔʘɴ в этом случае это будет .xml - person dennismonsewicz; 04.06.2014
comment
@ часть чрезвычайно важна! - person Ron Klein; 17.08.2014
comment
Итак, мы используем параметр --data-binary, но фактическое содержимое файла может быть текстом? Поскольку XML обычно не является двоичным. - person David; 13.07.2015
comment
да, содержимое файла может быть любым. Если вы хотите убедиться, что сервер знает, что вы даете ему xml, то -H Content-Type: text / xml сделает это за вас. - person Richard J; 27.07.2015
comment
на самом деле вы можете использовать просто флаг -d - person Anatoly Yakimchuk; 09.12.2016
comment
@ Tol182 -d приведет к тому, что curl удалит новые строки, а --data-binary - нет. - person Acumenus; 12.01.2017
comment
Для тех, кто не может заставить его работать, убедитесь, что вы указываете тип контента в своих заголовках! - person Susanne Peng; 05.07.2018
comment
Если вы выполняете команду curl по тому же пути, что и ваш файл данных, это просто --data-binary "@file". - person Cale Sweeney; 05.05.2020
comment
позволяет ли curl указать IP-адрес в параметре имени хоста? - person T3.0; 10.08.2020

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

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

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

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

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

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

person Gray    schedule 03.11.2017
comment
Если вам нужно отправить именованное поле, вы также можете использовать --data "name@stuff". - person Hermann; 03.09.2019

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

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

person Lucas Liu    schedule 05.01.2017

Большинство ответов здесь идеальны, но когда я приземлился здесь для решения своей конкретной проблемы, мне нужно загрузить двоичный файл (таблица XLSX) с помощью метода POST, я вижу одну вещь отсутствует, т.е. обычно это не просто файл, который вы загружаете, у вас может быть больше элементов данных формы, как комментарий к файлу или теги к файлу и т. д., как это было в моем случае. Следовательно, я хотел бы добавить его сюда, поскольку это был мой вариант использования, чтобы он мог помочь другим.

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

Мне пришлось использовать HTTP-соединение, потому что на HTTPS есть ограничение на размер файла по умолчанию.

https://techcommunity.microsoft.com/t5/IIS-Support-Blog/Solution-for-Request-Entity-Too-Large-error/ba-p/501134

    curl -i -X 'POST' -F 'file=@/home/testeincremental.xlsx' 'http://example.com/upload.aspx?user=example&password=example123&type=XLSX'
person Jefferson Mendes    schedule 24.12.2019