Каков синтаксис командной строки cURL для выполнения запроса POST?


2187

Как я могу сделать запрос POST с помощью инструмента командной строки cURL ?


curl -d "param1=value1&param2=value2" -X POST http://localhost:3000/data
svikramjeet

Ответы:


2542

С полями:

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

С полями, указанными индивидуально:

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

Multipart:

curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi

Multipart с полями и именем файла:

curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

Без данных:

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

Для получения дополнительной информации см. Руководство по cURL . Curl учебник по эмулировать веб - браузер является полезным.

С помощью libcurl используйте curl_formadd()функцию для создания формы, прежде чем отправлять ее обычным способом. См. Документацию libcurl для получения дополнительной информации.

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

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

-o outputТребуется, в противном случае не будет отображаться не индикатор.


7
@LauriRanta --data-urlencode(без черты), по крайней мере, в последних версиях
waitinforatrain

4
Также работает, если вам нужно обновить ресурс с PUT: curl -X PUT ...
Subfuzion

3
У меня проблемы с пониманием ... когда я это сделаю With Fields, когда Multipartи когда Without Data?
CodyBugstein

7
Вместо --dataтебя можно использовать -d.
user35538

у меня есть массив полей. Как я могу это сделать?
ARUNBALAN NV

507

Для RESTful HTTP POST, содержащего XML:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"

или для JSON используйте это:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"

Это прочитает содержимое названного файла filename.txtи отправит его как запрос на публикацию.


13
Объяснение @ tom-wijsman: curl -X POSTподразумевает HTTP-запрос POST, -dпараметр (long version :) --dataсообщает curl, что ниже будут параметры POST, и @filenameопределяет содержимое файла в filenameкачестве параметра. Этот подход лучше всего работает с HTTP-API RESTful, которые можно найти в Twitter, Facebook, различных других веб-сервисах, включая Ruby on Rails, а также HTTP-API баз данных, таких как CouchDB. REST расшифровывается как « Представительный государственный перевод»
soundmonster

1
Как мы можем увидеть ответ XML не в одну строку, а отформатирован?
Виталий Зданевич

6
Я думаю, что вы можете отказаться от, -X POSTпоскольку это подразумевается -d.
benjifisher

Как дать несколько заголовков?
Кея

Несколько заголовков: curl -H "header2: 1" -H "header2: 2" ...
Томаш Кратохвила

131

Данные из stdin с -d @-

Пример:

echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown

Выход:

<p>Hello <strong>world</strong>!</p>

6
Отлично, если у вас уже есть объект JSON в буфере обмена
Luca Steeb

еще лучше: echo "$ message" | curl -H "Content-Type: application / json" -d @ - "$ url"
rzr

66
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

это пример, найденный в руководстве к примеру Curl .

Используйте% 26 для амперсандов, хотя, если вышеперечисленное не работает:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 

61

Если вы хотите войти на сайт, сделайте следующее:

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

Первый запрос сохраняет файл cookie сеанса (который предоставляется при успешном входе в систему) в файл «заголовки». Отныне вы можете использовать этот файл cookie для аутентификации вас в любой части веб-сайта, к которой вы обычно обращаетесь после входа в браузер.


6
примечание со справочной страницы curl: «Опция -c, --cookie-jar - лучший способ хранения файлов cookie».
maxschlepzig

32
curl -v --data-ascii var=value http://example.com

и есть еще много вариантов, проверьте curl --helpдля получения дополнительной информации.


27

Если вы ленивый, вы можете получить Google-Chrome, чтобы сделать всю работу за вас.

  1. Щелкните правой кнопкой мыши форму, которую вы хотите отправить, и выберите « Проверить» . Это откроет панель DevTools.
  2. Выберите вкладку « Сеть » в devtools и установите флажок « Сохранить журнал» .
  3. Отправьте форму и найдите запись с методом POST (щелкните правой кнопкой мыши заголовок любого столбца и убедитесь, что метод отмечен).
  4. Щелкните правой кнопкой мыши строку POST и выберите « Копировать» > « Копировать как cURL» .

chrome devtools: копировать как cURL

Chrome скопирует все данные запроса в синтаксисе cURL.

В Chrome --data 'param1=hello&param2=world'вы можете сделать его более читабельным, используя один -dили несколько -Fпараметров, в зависимости от того, какой тип запроса POST вы хотите отправить, который может быть одним application/x-www-form-urlencodedили multipart/form-dataсоответствующим.

Это будет POST-ed как application/x-www-form-urlencoded( используется для большинства форм, которые не содержат загрузки файлов ):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -d param1=hello \
    -d name=dinsdale

Для использования multipart/form-dataPOST -F( обычно используется с формами, которые содержат загрузку файлов, или где важен порядок полей, или где требуются несколько полей с одинаковым именем ):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -F param1=hello \
    -F name=dinsdale \
    -F name=piranha

User-AgentЗаголовок обычно не требуется, но я бросил его в всяком случае. Вы можете избежать установки пользовательского агента на каждый запрос, создав ~/.curlrcфайл, который содержит, например,User-Agent: "Mozilla/2.2"

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.