Что такое Curl?
cURL, что означает Client URL, – это утилита командной строки с открытым исходным кодом, используемая разработчиками для передачи данных на сервер или с сервера по различным поддерживаемым протоколам.
Поддерживаемые протоколы включают HTTP POST, HTTP PUT, загрузку файлов на FTP, отправку веб-форм, аутентификацию пользователя, HTTP Cookies, HTTP, HTTPS, FTP, FTPS, SFTP, встроенные SSL-сертификаты и многое другое.
⚓ Как использовать команду cURL в Linux
Эта утилита установлена по умолчанию в большинстве дистрибутивов Linux и macOS, а также доступна для Windows.
Эта утилита в основном используется разработчиками для тестирования API, просмотра ответов сервера и выполнения HTTP-запросов.
🖧 Как выполнять несколько запросов curl параллельно
В этой статье мы дадим вам подробное руководство о том, как выполнить POST-запрос с помощью cURL.
🖧 В чем разница между curl и Wget?
Что такое метод запроса HTTP POST?
HyperText Transfer Protocol (HTTP) – это протокол “запрос-ответ”, который обеспечивает связь между клиентскими машинами и серверами.
Например, когда вы ищете что-то в браузере, ваш компьютер отправляет POST-запрос на сервер, который посылает ответ.
Ответ содержит информацию о состоянии отправленного запроса и запрашиваемом содержимом.
Существует несколько методов HTTP.
К ним относятся POST, GET, PUT, HEAD, DELETE, PATCH и OPTIONS. Однако наиболее распространенными являются POST и GET.
Протокол HTTP – коды состояния – формат запроса и ответа – методы HTTP на пальцах
Данные, отправленные из браузера на сервер с помощью метода HTTP POST, хранятся в теле запроса, как показано ниже.
POST /test/demo_form.php HTTP/1.1 Content-Type: application/json Content-Length: 1024 Host: itsecforu.ru
Отправка POST-запроса с помощью Curl
Из приведенного выше кода вы можете увидеть все параметры, необходимые для отправки POST-запросов.
Сначала нам нужно указать метод HTTP с помощью параметра -X.
В данном случае это метод POST. Далее необходимо указать тип содержимого с помощью параметра -H.
Это позволит серверу определить тип данных в теле запроса и обработать его соответствующим образом.
Существует два варианта Content-Type: application/x-www-form-urlencoded, который используется при отправке веб-формы на сервер, и multipart/form-data, который используется для загрузки файлов на сервер.
Вы используете параметр -F для отправки данных с использованием типа содержимого multipart/form-data и -d для отправки данных с использованием типа содержимого application/x-www-form-urlencoded.
Последний параметр – это хост/сервер.
Здесь вы можете ввести URL вашего целевого сайта.
Синтаксис CURL по умолчанию для отправки POST-запроса приведен ниже.
curl -X POST [options] [URL]
Параметр -X определяет метод HTTP для отправки запроса. В нашем случае мы используем метод POST.
Выполним простой POST-запрос с помощью CURL
Чтобы сделать базовый POST-запрос с помощью команды Curl, выполните приведенную ниже команду в терминале.
curl -X POST https://example.com
Отправка дополнительных полей в запросе Curl Post
Мы можем использовать параметр -d для отправки дополнительных данных в POST-запросе.
Помните, что использование этого параметра также определяет заголовок Content-Type/ по умолчанию как application/x-www-form-urlencoded.
Чтобы лучше понять, как мы можем отправлять дополнительные поля, давайте рассмотрим простой HTML-код ниже.
Этот код отображает в браузере простой экран входа в систему с тремя основными полями.
Поле имени пользователя, которое использует имя ввода “user”, поле пароля, которое использует имя ввода “pass”, и кнопка входа.
Вы также можете видеть, что для отправки данных на сервер используется метод HTTP – POST.
Этот код отображает в браузере простой экран входа в систему с тремя основными полями.
Поле имени пользователя, которое использует имя ввода “user”, поле пароля, которое использует имя ввода “pass”, и кнопка входа.
Вы также можете видеть, что для отправки данных на сервер используется метод HTTP – POST.
Вам не нужно понимать весь код Javascript, поскольку то же самое можно сделать с помощью различных языков программирования. К ним относятся PHP, Python, Java и т.д.
var username = req.body.user; var password = req.body.pass;
Первая строка var username = req.body.user; считывает пользовательский ввод в поле username и сохраняет его в переменной username.
Помните, что это поле использует имя ввода “user”, как показано в HTML-коде.
Вторая строка var password = req.body.pass; считывает данные, введенные пользователем в поле password, и сохраняет их в переменной password.
Помните, что это поле использует имя ввода “pass”, как показано в HTML-коде.
После обработки введенных пользователем данных код NodeJS выведет на экран браузера сообщение “LOGIN SUCCESS” или “INVALID CREDENTIALS”.
Поскольку нам известны имена ввода, используемые для различных полей, вместо того, чтобы запускать браузер и вводить имя пользователя и пароль напрямую, мы можем использовать CURL для отправки этой информации и вывода ответа сервера на терминал.
Разве это не интересно?
Это даже больше похоже на автоматизацию браузера.
Давайте рассмотрим синтаксис команды, которую мы будем использовать для достижения этой цели.
curl -d "[Input-Name]=[Your-UserName] & [Input-Pass]=[Your-UserPassword]" -X POST [Target-Host]
Давайте воспользуемся приведенным выше синтаксисом для написания нашей команды:
curl -d "user=johndoe & pass=12345" -X POST http://localhost:3000/
Если вы веб-разработчик или интересуетесь безопасностью веб-приложений, вы всегда можете узнать название различных полей/элементов HTML, щелкнув правой кнопкой мыши на элементе в браузере и выбрав опцию “inspect element”. Это откроет код HTML и CSS. Однако это может быть применимо не ко всем сайтам.
Укажите Content-Type в POST-запросе с помощью Curl
echo; curl -d "user=johndoe&pass=12345" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://192.168.1.52:3001/; echo; echo
И вот здесь самое интересное. Давайте попробуем указать Content-Type на что-то другое, например application/json.
echo; curl -d "user=johndoe&pass=12345" -H "Content-Type: application/json" -X POST http://192.168.1.52:3001/; echo; echo
Если вы укажете Content-Type как application/json, сервер поймет, что вы отправляете данные в формате JSON, которые будут иметь вид {“name” : “johndoe”, “pass” : “12345”}.
При использовании application/x-www-form-urlencoded сервер будет обрабатывать данные в формате name=johndoe&pass=12345.
Загрузка файлов с помощью Curl с использованием метода POST
Чтобы отправить файл с помощью Curl методом POST, мы используем параметр -F и добавим символ @ в начало пути к файлу.
Пример:
curl -X POST -F 'image=@/home/ubuntu-user/image.png' http://192.168.1.52:3001/upload
Если вы хотите загрузить документ, например, pdf или файл ‘.txt’, мы установим тип ‘fileupload’.
Пример:
curl -X POST -F 'fileupload=@/home/ubuntu-user/textFile.txt' http://192.168.1.52:3001/upload
Заключение
Теперь вы хорошо понимаете команду CURL и даже знаете, как выполнять HTTP POST запросы.
Для получения дополнительной информации о Curl вы можете заглянуть на страницу официальной документации.
Есть ли у вас какие-либо вопросы или комментарии по этой теме?
Если да, пожалуйста, пишите в комментариях ниже.