Как я могу сделать запрос POST с помощью инструмента командной строки cURL ?
7 ответов
С полями:
curl --data "param1=value1¶m2=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
необходим, иначе индикатор выполнения не появится.
Для 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
и отправит его как запрос на публикацию.
Данные из стандартного ввода с -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
Если вы хотите войти на сайт, сделайте следующее:
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, чтобы сделать всю работу за вас.
- Щелкните правой кнопкой мыши форму, которую вы хотите отправить, и выберите « Проверить». Это откроет панель DevTools.
- Выберите вкладку « Сеть » в devtools и установите флажок « Сохранить журнал».
- Отправьте форму и найдите запись с методом POST (щелкните правой кнопкой мыши заголовок любого столбца и убедитесь, что метод отмечен).
- Щелкните правой кнопкой мыши строку POST и выберите « Копировать» > « Копировать как cURL».
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
(используется для большинства форм, которые не содержат загрузки файлов):
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"