it-swarm.xyz

Что такое синтаксис командной строки cURL, чтобы сделать POST запрос?

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

2119
Laurie Young

С полями:

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

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

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 требуется, иначе индикатор выполнения не появится.

2462
Stephen Deken

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

496
soundmonster

Данные из стандартного ввода с -d @-

Пример:

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

Результат:

<p>Hello <strong>world</strong>!</p>
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 
65
Patrick Desjardins

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

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

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

58
Martin Konecny
curl -v --data-ascii var=value http://example.com

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

32
Vinko Vrsalovic

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

  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 используйте -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"

20
ccpizza