Как я могу сделать запрос POST с помощью инструмента командной строки cURL ?
Каков синтаксис командной строки cURL для выполнения запроса POST?
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Требуется, в противном случае не будет отображаться не индикатор.
Также работает, если вам нужно обновить ресурс с помощью PUT: curl -X PUT ...
У меня проблемы с пониманием ... когда я буду делать это "с полями", когда с "Multipart" и когда "без данных"?
Вместо --data вы можете использовать -d.
у меня есть массив полей. Как я могу это сделать?
@ARUNBALANNV сначала преобразует их в строку с помощью implode
Для 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и отправит его как запрос на публикацию.
Объяснение @ tom-wijsman: curl -X POST подразумевает HTTP-запрос POST, параметр -d (длинная версия: --data) сообщает curl, что последующими будут параметры POST, а @ filename обозначает содержимое файла filename в качестве параметра. Этот подход лучше всего работает с HTTP-API RESTful, которые можно найти в Twitter, Facebook, различных других веб-сервисах, включая Ruby on Rails, а также HTTP-API баз данных, таких как CouchDB. REST означает Передача представительского состояния
Как мы можем увидеть ответ XML не в одну строку, а отформатирован?
Я думаю, что вы можете опустить -X POST, поскольку это подразумевается -d.
Как дать несколько заголовков?
Несколько заголовков: curl -H "header2: 1" -H "header2: 2" ...
Данные из stdin : использовать -d @-. Пример:
echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown Выход:
<p>Hello <strong>world</strong>!</p> Отлично, если у вас уже есть объект JSON в буфере обмена
еще лучше: echo "$ message" | curl -H "Content-Type: application / json" -d @ - "$ url"
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: «Опция -c, --cookie-jar, тем не менее, является лучшим способом хранения файлов 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 Для использования multipart/form-dataPOST -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"

@LauriRanta
--data-urlencode(без тире), по крайней мере в последних версиях