
curl — это утилита командной строки для передачи данных с/на удалённый сервер по одному из поддерживаемых протоколов. Она установлена по умолчанию в Windows, macOS и большинстве дистрибутивов Linux.
Системные администраторы, разработчики и другие пользователи используют curl для тестирования API , просмотра заголовков ответов и выполнения HTTP-запросов.
В этой статье объясняется, как использовать curl для выполнения POST-запросов.
Параметры cURL
Для отправки данных на удаленный сервер используется метод 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=linuxize&email=linuxize@example.com' https://example.com/form/
В приведенном выше примере мы отправляем на удаленный сервер данные, состоящие из двух пар ключ-значение: «name=linuxize» и « email=linuxize@example.com ».
Вы также можете отправлять данные, используя несколько опций -d . Например, приведенную выше команду можно записать так:
curl -d 'name=linuxize' -d 'email=linuxize@example.com' https://example.com/form/
При отправке данных в curl с опцией -d необходимо всегда корректно кодировать все символы, не являющиеся буквами и цифрами, как в ключах, так и в значениях. Например, если вы отправляете данные, содержащие имя с пробелами («John Doe»), команда будет выглядеть так:
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=linuxize' -F 'image@photo.jpg' https://example.com/form/
Загрузка файлов
Чтобы отправить файл с помощью curl , добавьте символ @ перед местоположением файла. Файл может быть архивом, изображением, документом и т. д.
curl -F 'image=@/home/user/Pictures/wallpaper.jpg' http://example.com/upload/
Отправка данных JSON с помощью cURL
JSON — это текстовый формат данных, который используется для передачи данных между веб-сервисами и API.
Вы можете отправить данные JSON методом POST с помощью curl , используя опцию --json .
Вот простой пример отправки JSON-объекта на сервер:
curl --json '{"website": "linuxgazette.ru"}' 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": "linuxgazette.ru"}' | curl --json @- http://example.com/api/
Часть @- означает чтение тела из стандартного ввода.
Заключение
Мы показали вам, как использовать curl для выполнения POST-запросов. Подробнее о curl можно узнать на странице документации Curl .
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства
- Как установить и использовать Curl в Ubuntu 20.04
- Использование Curl для выполнения запросов REST API
- Как установить и использовать Curl в CentOS 8
- Как установить и использовать Curl в Debian 10 Linux
- Как установить и использовать Curl в Ubuntu 18.04
- Команда Curl в Linux с примерами
- Команда Bash read