2117

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

7 ответов7

2454

С полями:

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

494

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

123

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

Пример:

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

Выход:

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

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

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

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

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

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

20

Если вы ленивый, вы можете получить 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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .