curl – это инструмент командной строки для передачи данных по различным сетевым протоколам. Доступный на всех основных операционных системах, curl стал стандартным инструментом для отправки HTTP-запросов из командной строки.
Кроссплатформенная утилита curl поддерживает такие протоколы, как HTTP, HTTPS, FTP и IMAP, что позволяет легко отправлять запросы к API и парсить веб-сайты с помощью curl. Благодаря широкой доступности и поддержке множества протоколов, вы часто можете встретить ссылки на curl в документации по REST API как на быстрый способ тестирования вызовов API непосредственно из командной строки:
В этой статье вы узнаете, как отправлять POST-запросы с помощью curl из командной строки.
Что такое POST-запрос
POST-запрос – это метод HTTP для отправки данных на сервер, один из самых распространенных методов HTTP.
Когда вы отправляете POST-запрос, передаваемые данные включаются в тело запроса. Это позволяет отправлять данные более скрытно, чем в URL (как в случае с GET-запросом). Вы также можете отправить значительно больше данных в POST-запросе, обходя ограничения на длину URL, накладываемые браузерами на GET-запросы.
POST-запросы часто используются для отправки форм, загрузки файлов или передачи JSON-данных в API. По сравнению с GET, POST-запросы обычно не кэшируются, и данные не отображаются в истории браузера, поскольку они содержатся в теле запроса.
Как отправить POST-запрос с помощью curl
Прежде чем приступить к этому уроку, вам необходимо установить curl на свой компьютер. Выполните следующую команду, чтобы проверить, установлен ли curl:
curl --version
Если вы получаете ошибку о том, что команда не найдена, вам нужно установить утилиту
Установите curl
Ниже приведены инструкции по установке curl на все основные операционные системы:
Windows
В Windows для установки curl можно использовать WinGet, менеджер пакетов по умолчанию в Windows 11:
winget install curl.curl
Chocolatey – это еще один менеджер пакетов для Windows, который позволяет установить curl с помощью следующей команды:
choco install curl
Linux
curl доступен в большинстве менеджеров пакетов Linux. На Ubuntu/Debian для установки curl используйте следующую команду:
apt-get install curl
Red Hat Enterprise Linux (RHEL), CentOS и Fedora позволяют установить curl с помощью Yellowdog Updater Modified (YUM), например, так:
yum install curl
Если вы используете OpenSUSE, вы можете установить curl с помощью следующей команды в терминале:
zypper install curl
Наконец, Arch Linux позволяет использовать pacman для установки curl с помощью этой команды:
pacman -Sy curl
macOS
Homebrew – это самый простой способ установить curl на macOS. Убедитесь, что у вас установлен Homebrew, а затем выполните следующую команду:
brew install curl
Теперь, когда вы установили curl на свою операционную систему, вы готовы узнать, как выполнять POST-запросы.
Выполните POST-запрос
curl позволяет указать несколько параметров при отправке POST-запросов. В следующих разделах будут показаны некоторые общие возможности curl, с которыми вы можете столкнуться при выполнении POST-запросов с помощью этой утилиты.
Укажите метод POST
При выполнении HTTP-запросов с помощью curl необходимо указать HTTP-метод, который вы хотите использовать. К HTTP-методам относятся GET, POST, PUT и DELETE. curl позволяет указать HTTP-метод, который вы хотите использовать, с помощью флага командной строки -X
.
Например, чтобы отправить POST-запрос на https://httpbin.org/anything
, вы можете выполнить в терминале следующую команду curl:
curl -X POST https://httpbin.org/anything
httpbin.org повторяет тело запроса и заголовки в ответе. Ваш ответ должен выглядеть следующим образом:
{
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/8.1.2",
"X-Amzn-Trace-Id": "Root=1-11111111-111111111111111111111111"
},
"json": null,
"method": "POST",
"origin": "0.0.0.0",
"url": "https://httpbin.org/anything"
}
Флаг -X POST
эквивалентен использованию флага --request
POST, поэтому вы также можете выполнить следующую команду и получить тот же результат:
curl --request POST https://httpbin.org/anything
Ответ выглядит так же, как и предыдущий.
Подробнее о флагах -X
и --request
вы можете прочитать в официальной документации.
Установите тип содержимого
При отправке POST-запроса важно указать тип отправляемого содержимого в теле запроса, чтобы сервер мог правильно интерпретировать тело запроса. Вы можете использовать типы MIME в заголовке Content-Type
в HTTP-запросе, чтобы указать формат тела запроса.
Например, если вы отправляете JSON в теле запроса, вам нужно указать веб-серверу, что он ожидает JSON-содержимое, установив в заголовке Content-Type
значение application/json
. Если вы отправляете XML, заголовок Content-Type
должен быть application/xml
. Для получения дополнительной информации ознакомьтесь с официальной документацией по Content-Type
.
curl позволяет задать заголовки для HTTP-запроса с помощью флага -H
. Например, если вы отправляете JSON в POST-запросе, следующая команда curl показывает, как вы можете установить заголовок Content-Type
для запроса:
curl -X POST -H 'Content-Type: application/json' -d '{}' https://httpbin.org/anything
В ответе можно увидеть, что в заголовке Content-Type
установлено значение application/json
:
{
"args": {},
"data": "{}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "2",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/8.1.2",
"X-Amzn-Trace-Id": "Root=-11111111-111111111111111111111111"
},
"json": {},
"method": "POST",
"origin": "0.0.0.0",
"url": "https://httpbin.org/anything"
}
Флаг -H
также может быть указан с помощью более длинного флага --header
. В этом случае ваша команда curl будет выглядеть следующим образом:
curl -X POST --header 'Content-Type: application/json' -d '{}' https://httpbin.org/anything
Ваш ответ будет выглядеть так же, как и предыдущий.
Отправьте данные
Вы могли заметить, что в предыдущих командах был флаг -d
. Этот флаг позволяет указать данные для отправки в теле запроса. С помощью этого флага можно передать любую строку значений, заключенную в кавычки, например, так:
curl -X POST -H 'Content-Type: application/json' -d '{
"FirstName": "Joe",
"LastName": "Soap"
}' https://httpbin.org/anything
Вы заметите, что httpbin.org показывает данные тела, которые вы отправили, в свойстве data
ответа.
Если у вас есть файл с данными, которые вы хотите, чтобы curl отправил в тело запроса, укажите имя файла с префиксом @
. Следующая команда считывает содержимое файла body.json
и отправляет его в теле запроса:
curl -X POST -H 'Content-Type: application/json' -d @body.json https://httpbin.org/anything
В этом случае файл body.json
содержит следующее:
{
"FirstName": "Joe",
"LastName": "Soap"
}
При отправке этого сообщения httpbin.org должен вернуть следующий ответ:
{
"args": {},
"data": "{\t\"FirstName\": \"Joe\",\t\"LastName\": \"Soap\"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "41",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/8.1.2",
"X-Amzn-Trace-Id": "Root=1-11111111-111111111111111111111111"
},
"json": {
"FirstName": "Joe",
"LastName": "Soap"
},
"method": "POST",
"origin": "0.0.0.0",
"url": "https://httpbin.org/anything"
}
Флаг--data
ведет себя так же, как и -d
, поэтому их можно использовать как взаимозаменяемые.
Отправьте данные в формате JSON
В предыдущем разделе вы узнали, как можно отправить JSON-данные, установив в заголовке Content-Type
значение application/json
, а затем передав JSON-данные с помощью флага -d
. При отправке запроса также важно сообщить веб-серверу, какой формат данных вы ожидаете получить в ответ. Вы можете использовать заголовок Accept
со значением application/json
, чтобы сообщить веб-серверу, что вы хотите получить ответ в формате JSON.
Следующая команда отправляет запрос JSON на сервер и сообщает серверу, что вы хотите получить JSON в ответ:
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
"FirstName": "Joe",
"LastName": "Soap"
}' https://httpbin.org/anything
Вы заметите, что свойства data
и json
в теле ответа содержат данные JSON, которые вы отправили в запросе:
{
"args": {},
"data": "{\n \"FirstName\": \"Joe\",\n \"LastName\": \"Soap\"\n}",
"files": {},
"form": {},
"headers": {
"Accept": "application/json",
"Content-Length": "50",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/8.1.2",
"X-Amzn-Trace-Id": "Root=1-11111111-111111111111111111111111"
},
"json": {
"FirstName": "Joe",
"LastName": "Soap"
},
"method": "POST",
"origin": "0.0.0.0",
"url": "https://httpbin.org/anything"
}
Отправка и получение JSON-данных – обычное дело при отправке HTTP-запросов, поэтому curl предлагает флаг --json
, который устанавливает для вас заголовки Content-Type
и Accept
и отправляет JSON-данные в теле запроса. Используя этот флаг, вы можете сократить свою команду для отправки JSON в POST-запросе:
curl -X POST --json '{
"FirstName": "Joe",
"LastName": "Soap"
}' https://httpbin.org/anything
Это дает тот же ответ, что и раньше:
{
"args": {},
"data": "{\n \"FirstName\": \"Joe\",\n \"LastName\": \"Soap\"\n}",
"files": {},
"form": {},
"headers": {
"Accept": "application/json",
"Content-Length": "50",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/8.1.2",
"X-Amzn-Trace-Id": "Root=1-11111111-111111111111111111111111"
},
"json": {
"FirstName": "Joe",
"LastName": "Soap"
},
"method": "POST",
"origin": "0.0.0.0",
"url": "https://httpbin.org/anything"
}
Флаг--json
был выпущен в версии 7.82 curl в марте 2022 года, поэтому перед его использованием убедитесь, что у вас установлена последняя версия curl.
Отправка XML-данных
Curl также позволяет отправлять данные в других форматах, например XML. Чтобы отправить XML-данные, необходимо установить в заголовке Content-Type
значение application/xml
и передать XML-данные в теле запроса с помощью флага -d
. Вы также можете сообщить веб-серверу, что ожидаете получить ответ в формате XML, установив в заголовке Accept
значение application/xml
.
Следующая команда показывает, как можно отправить XML-объект в POST-запросе с помощью curl:
curl -X POST -H 'Content-Type: application/xml' -H 'Accept: application/xml' -d '<Person>
<FirstName>Joe</FirstName>
<LastName>Soap</LastName>
</Person>' https://httpbin.org/anything
Вы найдете данные XML-запроса в свойстве data
, возвращаемом httpbin.org:
{
"args": {},
"data": "<Person>\n <FirstName>Joe</FirstName>\n <LastName>Soap</LastName>\n</Person>",
"files": {},
"form": {},
"headers": {
"Accept": "application/xml",
"Content-Length": "79",
"Content-Type": "application/xml",
"Host": "httpbin.org",
"User-Agent": "curl/8.1.2",
"X-Amzn-Trace-Id": "Root=1-11111111-111111111111111111111111"
},
"json": null,
"method": "POST",
"origin": "0.0.0.0",
"url": "https://httpbin.org/anything"
}
Отправьте данные формы
Вы можете использовать FormData
для отправки пар ключ-значение данных на веб-сервер. Как следует из названия, этот формат данных используется при отправке формы на веб-странице. Пары ключ-значение содержат имя поля и значение.
curl позволяет указывать FormData
с помощью флага-F или –form. При использовании этого флага укажите имя и значение поля в следующем формате: -F <name=content>
or --form <name=content>
.
Следующий фрагмент показывает команду curl, которая отправляет POST-запрос с использованием FormData
с полями FirstName
и LastName
:
curl -X POST -F FirstName=Joe -F LastName=Soap https://httpbin.org/anything
Имена и значения полей формы вы найдете в свойстве form
объекта ответа httpbin.org:
{
"args": {},
"data": "",
"files": {},
"form": {
"FirstName": "Joe",
"LastName": "Soap"
},
"headers": {
"Accept": "*/*",
"Content-Length": "248",
"Content-Type": "multipart/form-data; boundary=------------------------e2bb56049a60b8b8",
"Host": "httpbin.org",
"User-Agent": "curl/8.1.2",
"X-Amzn-Trace-Id": "Root=1-11111111-111111111111111111111111"
},
"json": null,
"method": "POST",
"origin": "0.0.0.0",
"url": "https://httpbin.org/anything"
}
Используйте флаг -F
для каждого поля, которое вы хотите отправить на сервер.
Загрузите файлы
Вы можете использовать FormData
для загрузки файлов в POST-запросе, прикрепляя файл к полю. Чтобы сообщить curl о том, что поле FormData
содержит файл, введите путь к файлу в значение поля с префиксом @
.
Следующая команда curl загружает файл Contract.pdf
в ваш рабочий каталог. Для загрузки файла команда использует поле под названием File
:
curl -X POST -F [email protected] https://httpbin.org/anything
Ответ содержит весь файл, поэтому он длинный, но должен выглядеть так:
{
"args": {},
"data": "",
"files": {
"File": "..."
},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "246",
"Content-Type": "multipart/form-data; boundary=------------------------19ed1fc3be4d30c7",
"Host": "httpbin.org",
"User-Agent": "curl/8.1.2",
"X-Amzn-Trace-Id": "Root=1-11111111-111111111111111111111111"
},
"json": null,
"method": "POST",
"origin": "0.0.0.0",
"url": "https://httpbin.org/anything"
}
Отправьте учетные данные
Многие конечные точки HTTP требуют аутентификации для отправки запросов. Веб-сервер решает, какой метод аутентификации следует использовать. Одним из таких методов является базовая схема аутентификации, которая позволяет отправлять в запросе учетные данные, состоящие из имени пользователя и пароля. Затем сервер проверяет учетные данные и, если они верны, обрабатывает запрос
сurl упрощает отправку базовых учетных данных аутентификации с помощью флага -u
или --user
. Затем вы указываете имя пользователя и пароль, разделяя их символом :
(двоеточие), например: -u <username:password>
.
Следующий фрагмент использует curl для отправки POST-запроса с учетными данными пользователя и телом в формате JSON:
curl -X POST -u 'admin:password123' --json '{
"FirstName": "Joe",
"LastName": "Soap"
}' https://httpbin.org/anything
Обратите внимание, как curl кодирует имя пользователя и пароль и отправляет их в заголовке Authorization
:
{
"args": {},
"data": "{\n \"FirstName\": \"Joe\",\n \"LastName\": \"Soap\"\n}",
"files": {},
"form": {},
"headers": {
"Accept": "application/json",
"Authorization": "Basic YWRtaW46cGFzc3dvcmQxMjM=",
"Content-Length": "50",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/8.1.2",
"X-Amzn-Trace-Id": "Root=1-11111111-111111111111111111111111"
},
"json": {
"FirstName": "Joe",
"LastName": "Soap"
},
"method": "POST",
"origin": "0.0.0.0",
"url": "https://httpbin.org/anything"
}
Заключение
В этой статье вы узнали, как отправлять POST-запросы с помощью утилиты командной строки curl. Вы поняли, как использовать флаг -X
, чтобы указать, что вы хотите отправить POST-запрос. Вы также установили заголовки Content-Type
и Accept
с помощью флагов -H
и ---header
, чтобы веб-сервер знал, в каком формате отправляются данные. Чтобы отправить данные в теле запроса, используйте флаг -d
вместе с данными, которые вы хотите отправить.
Вы также увидели несколько примеров отправки нескольких типов данных, включая JSON, XML и FormDataa
, и узнали, как отправлять базовые учетные данные аутентификации в запросе с помощью флагов -u
и --user
.
Хотя в этой статье были показаны основные флаги, входящие в состав curl, и способы их использования, curl предлагает больше возможностей, которые вы можете изучить, включая использование переменных, отправку cookies с запросами и отправку запросов с помощью прокси. Многие языки программирования также предоставляют библиотеки, позволяющие работать с curl из этого языка, включая Python, Node.js и Rust.
Ищете решение для скрапинга? Поговорите с одним из наших экспертов по данным и узнайте, какой из наших продуктов лучше всего подходит для ваших потребностей.
Кредитная карта не требуется