Введение
curl
— это утилита командной строки для передачи данных на удаленный сервер или с него с использованием одного из поддерживаемых протоколов. Он установлен по умолчанию в Windows, macOS и большинстве дистрибутивов Linux.
Системные администраторы, разработчики и другие пользователи используют curl
для тестирования API, просмотра заголовков ответов и выполнения HTTP-запросов.
В этой статье объясняется, как использовать Curl для выполнения запросов POST.
Варианты завивки
Метод HTTP POST используется для отправки данных на удаленный сервер.
Общая форма команды curl
для выполнения POST-запроса выглядит следующим образом:
curl -X POST [options] [URL]
Опция -X
указывает, какой метод HTTP-запроса будет использоваться при обмене данными с удаленным сервером. В большинстве случаев вам не нужно задавать метод, поскольку он определяется параметрами командной строки.
Сделать POST-запрос
Типичный запрос POST отправляется через форму HTML, а данные, отправляемые в форму, обычно кодируются в формате application/x-www-form-urlencoded
. Ключи и значения данных кодируются парами ключ-значение, разделенными символом &
и разделёнными =
между ключом и значением.
Чтобы отправить запрос POST с помощью curl
, используйте опцию -d
( --data
), чтобы указать данные:
curl -d 'name=noviello&[email protected]' https://example.com/form/
В приведенном выше примере мы отправляем на удаленный сервер данные, состоящие из двух пар ключ-значение: «name=noviello» и « [email protected] ».
Вы также можете отправлять данные, используя несколько опций -d
. Например, приведенную выше команду можно записать и так:
curl -d 'name=noviello' -d '[email protected]' https://example.com/form/
При отправке данных в curl
с использованием опции -d
вы всегда должны правильно кодировать URL-адресом все небуквенно-цифровые символы как в ключах, так и в значениях. Например, если вы отправляете данные, содержащие имя с пробелами («Джон Доу»), команда будет выглядеть так:
curl -d 'name=John%20Doe' https://example.com/form/
Однако немного неудобно вручную кодировать данные, которые еще не закодированы. В этом случае лучше использовать опцию --data-urlencode
, которая сообщает curl
кодировать предоставленные данные. Приведенная выше команда при использовании с опцией --data-urlencode
будет выглядеть следующим образом:
curl --data-urlencode 'name=John Doe' https://example.com/form/
Данные, передаваемые команде curl
, обычно имеют форму key=value
. Когда вы используете опцию --data-urlencode
, кодируется только часть значения. curl
ожидает, что ключ уже закодирован в URL.
Если вы отправляете данные, содержащие большое количество пар ключ-значение, вместо того, чтобы вводить данные в командной строке, вы можете сохранить их в файле и передать этот файл в curl
:
curl -d @name_of_the_file https://example.com/form/
Когда данные, передаваемые команде, начинаются с символа @
, curl
обрабатывает данные как файл в локальной системе и читает и использует данные из этого файла.
Сделайте запрос POST, используя данные составной формы.
Тип содержимого multipart/form-data
используется, когда данные формы содержат двоичные файлы или другие большие полезные данные.
Чтобы создать составной запрос POST, вызовите команду curl
с одним или несколькими параметрами -F
( --form
), за которыми следуют пары key=value
. Когда используется опция -F
, curl
отправляет данные, используя тип контента multipart/form-data
.
В следующем примере показано, как выполнить POST-запрос к форме, содержащей поля «имя» и «изображение».
curl -F 'name=noviello' -F '[email protected]' https://example.com/form/
Файл загружен
Чтобы отправить файл с помощью curl
, добавьте символ @
перед путем к файлу. Файл может быть архивом, изображением, документом и т. д.
curl -F 'image=@/home/user/Pictures/wallpaper.jpg' http://example.com/upload/
Данные POST JSON с помощью cURL
JSON — это текстовый формат данных, используемый для передачи данных между веб-сервисами и API.
Вы можете отправить данные JSON с помощью POST, используя curl
--json
.
Вот базовый пример отправки объекта JSON на сервер:
curl --json '{"website": "noviello.it"}' http://example.com/api/
curl
отправляет данные JSON «как есть», поэтому убедитесь, что они в допустимом формате JSON.
Как и в случае с обычными запросами POST, вы можете использовать несколько параметров --json
в одной команде:
curl --json '{"name": "Jonn"}' --json '{"age": "36"}' http://example.com/api/
Данные JSON также можно прочитать из локального файла:
curl --json @json_data.txt http://example.com/api/
Если вы используете скрипт curl
, вы можете передать данные JSON из другой команды в curl
, как показано ниже:
echo '{"website": "noviello.it"}' | curl --json @- http://example.com/api/
Часть @-
означает чтение тела из стандартного ввода.
Заключение
Мы показали вам, как использовать curl
для выполнения POST-запросов. Для получения дополнительной информации о curl
посетите страницу документации Curl.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.