2008-09-17 15:39:01 +0000 2008-09-17 15:39:01 +0000
2240
2240

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

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

Ответы (7)

2607
2607
2607
2008-09-17 15:43:28 +0000

С полями:

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

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

Multipart:

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

Multipart с полями и именем:

Без данных:

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

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

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

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

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

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

517
517
517
2011-03-10 08:29:31 +0000

Для 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 и отправит его в качестве почтового запроса.

137
137
137
2014-03-25 19:35:44 +0000

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

Пример:

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

Выход:

<p>Hello <strong>world</strong>!</p>
69
69
69
2008-09-17 15:42:15 +0000
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi

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

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
```.
63
63
63
2012-03-04 02:21:37 +0000

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

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

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

35
35
35
2008-09-17 15:43:02 +0000
curl -v --data-ascii var=value http://example.com

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

33
33
33
2017-09-29 08:06:57 +0000

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

  1. Щелкните правой кнопкой мыши форму, которую вы хотите отправить, и выберите Inspect (или Inspect Element для Firefox). Откроется панель DevTools.
  2. Выберите вкладку Network в devtools и установите флажок Preserve log ( Persist Logs для Firefox).
  3. Отправьте форму и найдите запись с помощью метода POST (щелкните правой кнопкой мыши на заголовке любого столбца и убедитесь, что установлен флажок Method).
  4. Щелкните правой кнопкой мыши строку с POST и выберите Copy > Copy as 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 (_ используется для большинства форм, которые не содержат файла uploads_):

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

Для multipart/form-data POST использовать -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"

Похожие вопросы

16
19
15
9
5