Чтобы отправить данные формы на сервер с помощью Curl, вы можете использовать один из двух вариантов командной строки: -F (--form) или -d (--data). Параметр командной строки -F отправляет данные формы с типом содержимого multipart/form-data, а параметр командной строки -d отправляет данные формы с типом содержимого application/x-www-form-urlencoded.
1 2 3 | curl -X POST https://example.com/post/form -H "Content-Type: application/x-www-form-urlencoded" -d "param1=value1¶m2=value2" |
В этом примере Curl POST Form мы отправляем форму на адрес example.com в формате application/x-www-form-urlencoded.
Что такое Curl?
Curl - это популярный инструмент командной строки, используемый программистами и администраторами, который позволяет отправлять запросы на сервер, отправлять веб-формы и загружать файлы. Он поддерживает более 25 протоколов, включая HTTP и HTTPS, имеет встроенную поддержку веб-форм, SSL, аутентификации пользователей и HTTP Cookies. Curl работает в Linux, Mac, Windows. Это один из лучших инструментов на рынке для отладки сетевых запросов и вызовов API.
Что такое HTTP POST?
Метод HTTP POST - это один из девяти стандартных методов протокола передачи гипертекста (HTTP). POST запрашивает веб-сервер на получение и обработку данных, содержащихся в теле сообщения POST. Метод POST используется для отправки данных на сервер, загрузки файлов и изображений, а также для отправки HTML-форм. В отличие от запросов GET и HEAD, запросы HTTP POST могут изменять состояние сервера.
Что такое HTML-форма?
HTML-формы собирают пользовательский ввод на HTML-страницах и отправляют его на сервер для обработки. Например, веб-сайт может отображать HTML-страницу с полями для ввода имени и адреса электронной почты, чтобы зарегистрировать пользователя. Пользователь может ввести требуемую информацию, а затем нажать кнопку Submit, чтобы отправить данные на сервер для обработки. HTML-формы создаются с помощью тега <form>.
1 2 3 4 5 | <form action="/register" method="post"> <input type="text" id="name" name="name"> <input type="email" id="email" name="email"> <input type="submit" value="Submit"> </form> |
Как отправить HTML-форму с помощью Curl?
Чтобы отправить веб-форму с помощью Curl, вам нужно использовать опцию командной строки -d и передать данные формы в виде пар ключ/значение. По умолчанию Curl отправляет HTTP POST-запрос и публикует данные формы с типом содержимого application/x-www-form-urlencoded. Вы можете использовать параметр командной строки -H для отправки формы с другим типом содержимого и передать туда нужный тип данных, например, 'Content-Type: multipart/form-data'. Параметр командной строки -X POST является необязательным и может быть опущен.
Curl может отправлять веб-формы тем же способом, что и браузер, делая невозможным для серверной стороны различать, от какого клиента была отправлена форма. Для этого необходимо дополнительно указать имя User-Agent и HTTP-куки.
Синтаксис POST-формы Curl
Общий вид команды Curl для отправки веб-формы с помощью опции командной строки -d выглядит следующим образом:
1 | curl [URL] -d "key1=value1&key2=value2" |
Более подробная версия того же запроса выглядит следующим образом:
1 2 3 | curl -X POST [URL] -H "Content-Type: application/x-www-form-urlencoded" -d "key1=value1&key2=value2" |
Где:
- -X, --request: HTTP-метод для связи с сервером.
- -H, --header: HTTP-заголовки для отправки на сервер при POST-запросе.
- -d, --data: Данные, которые будут отправлены на сервер с помощью POST-запроса в виде пар ключ/значение.
Curl POST-форма с форматом multipart/form-data
Опция командной строки -F указывает Curl на отправку HTML-данных на сервер в формате multipart/form-data:
1 | curl [URL] -F name=Ivan -F photo=@Ivan.jpg |
Чтобы отправить несколько значений с помощью опции -F, используйте ее несколько раз в командной строке. Чтобы загрузить двоичные файлы, перед значением параметра поставьте знак @ и укажите путь к файлу.
Примеры POST-формы Curl
Примеры отправки HTML-форм с использованием опций командной строки -d и -F:
1 2 | curl https://example.com/echo/post/form -d "key1=value1&key2=value2" |
1 2 3 4 | curl https://example.com/echo/post/form -F key1=value1 -F key2=value2 -F photo=@photo.png |
Что такое multipart/form-data?
Multipart/form-data - это один из наиболее часто используемых типов содержимого для отправки двоичных данных на сервер. Multipart означает, что данные отправляются на сервер отдельными частями. Каждый из компонентов может иметь свой тип содержимого, имя файла и данные. Данные отделяются друг от друга граничной строкой. Curl отправляет многокомпонентный запрос со специально отформатированным телом сообщения POST в виде серии "частей", разделенных границами MIME.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | POST /post/form HTTP/1.1 Host: example.com Content-Type: multipart/form-data; boundary=---WD9146A Content-Length: 100 ---WD9146A Content-Disposition: form-data; name="user-name" Ivan ---WD9146A Content-Disposition: form-data; name="text-data"; filename="user.txt" Content-Type: text/plain [Text data] ---WD9146A Content-Disposition: form-data; name="html-data"; filename="user.html" Content-Type: text/html [HTML data] ---WD9146A-- |