Отправить POST-запрос с данными, указанными в файле через Curl - PullRequest
182 голосов
/ 20 июня 2011

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

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

Ответы [ 4 ]

281 голосов
/ 20 июня 2011

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

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

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

28 голосов
/ 03 ноября 2017

Мне нужно сделать запрос 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, ...

9 голосов
/ 05 января 2017

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

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

1 голос
/ 03 сентября 2018

Большинство ответов здесь идеально, но когда я приземлился здесь для решения своей конкретной проблемы, я должен загрузить двоичный файл (электронная таблица 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
...