Каков синтаксис командной строки cURL для выполнения POST-запроса?
Как я могу сделать запрос POST с помощью утилиты командной строки cURL ?
С полями:
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
, иначе индикатор прогресса не будет отображаться.
Для 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
и отправит его в качестве почтового запроса.
Данные из stdin с -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
Использовать %26 для амперсандов, хотя если вышеописанное не работает:
curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
```.
Если вы хотите войти на сайт, сделайте следующее:
curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/
Первый запрос сохраняет файл cookie сессии (который предоставляется при успешном входе в систему) в “заголовках” файла. С этого момента вы можете использовать этот cookie для аутентификации вас в любой части сайта, к которой вы обычно заходите после входа в систему через браузер.
curl -v --data-ascii var=value http://example.com
и есть много других вариантов, проверьте curl --help
для получения дополнительной информации.
Если вы ленивы, вы можете получить Google Chrome или Firefox, чтобы сделать всю работу за вас.
Chrome будет копировать все данные запроса в синтаксисе cURL.
Chrome использует --data 'param1=hello¶m2=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"