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

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

2048 голосов | спросил Laurie Young 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 17 Sep 2008 19:39:01 +0400 2008, 19:39:01

7 ответов


2381

С полями:

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 "[email protected]" https://example.com/resource.cgi

Многостраничное использование полей и имени файла:

curl --form "[email protected];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, иначе индикатор выполнения не появится.

ответил Stephen Deken 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 17 Sep 2008 19:43:28 +0400 2008, 19:43:28
479

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

ответил soundmonster 10 MaramThu, 10 Mar 2011 11:29:31 +03002011-03-10T11:29:31+03:0011 2011, 11:29:31
118

Данные из stdin : используйте -d @-. Пример:

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

Вывод:

<p>Hello <strong>world</strong>!</p>
ответил Ciro Santilli 新疆改造中心 六四事件 法轮功 25 MarpmTue, 25 Mar 2014 23:35:44 +04002014-03-25T23:35:44+04:0011 2014, 23:35:44
64
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 
ответил Patrick Desjardins 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 17 Sep 2008 19:42:15 +0400 2008, 19:42:15
57

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

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

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

ответил Martin Konecny 4 MaramSun, 04 Mar 2012 06:21:37 +04002012-03-04T06:21:37+04:0006 2012, 06:21:37
31
curl -v --data-ascii var=value http://example.com

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

ответил Vinko Vrsalovic 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 17 Sep 2008 19:43:02 +0400 2008, 19:43:02
14

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

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

 chrome devtools: 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 ( используется для большинства форм, которые не содержат загрузки файлов ):

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

Для multipart/form-data POST use -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"

ответил ccpizza 29 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 29 Sep 2017 11:06:57 +0300 2017, 11:06:57

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132