В программировании взаимодействие с различными языками и их платформами часто предполагает необходимость взаимодействия разработчика с серверами и API через HTTP-запросы. Хотя эту задачу можно решить с помощью кода, существует также удобный инструмент, который выделяется, когда дело доходит до взаимодействия с веб-сервисами непосредственно из командной строки. Он широко принят сообществом веб-разработчиков и называется Curl. В этой статье мы углубимся в возможности Curl и выясним, почему он так популярен в мире программирования.
Цели, которые это будет охватывать
- Введение в CURL
- Основное использование команды
- Поддерживаемые протоколы
- Расширенные возможности
Команда CURL
Инструмент командной строки используется в основном для передачи данных между клиентом (обычно компьютером, который вы используете) и сервером через различные сетевые протоколы. Эти протоколы включают в себя:
HTTP
HTTPS
FTP
FTPS
SCP
СМБ
Мы углубимся в это позже в статье.
Скажем так, Curl действует как мост между вашим компьютером и удаленными серверами, что, в свою очередь, облегчает обмен информацией.
Установка через разные операционные системы
Убунту
sudo apt-get install curl
Mac OS
brew install curl
Окна
Для Windows я бы рекомендовал следовать официальной документации Curl:
Sytax выглядит примерно так:
curl [options] [URL...]
Разбивка приведенного выше синтаксиса:
- curl: сама команда. Когда вы запускаете
“curl”в терминале или командной строке, вы вызываете инструмент Curl. - [опции]: это различные параметры или флаги командной строки, которые вы можете включить для изменения поведения Curl. Параметры начинаются с дефиса (-) или двойного дефиса ( —), за которым следует определенная команда или настройка. Например, вы можете использовать «-o» для указания выходного файла или «-header» для установки пользовательских заголовков HTTP.
- [URL…]: эта часть представляет один или несколько URL-адресов (унифицированных указателей ресурсов), с которыми вы хотите взаимодействовать с помощью Curl. URL-адреса могут указывать на веб-ресурсы, файлы или другие сетевые местоположения. Вы можете указать несколько URL-адресов, разделенных пробелами, если хотите выполнять операции с несколькими ресурсами с помощью одной команды Curl.
Основные команды для использования с командой Curl
Ввод
curl https://medium.com
Результат

Выполнение команды curl с URL-адресом https://medium.com инициирует HTTP-запрос GET к веб-сайту Medium и отобразит HTML-содержимое страницы в вашем терминале.
Примечание. Выходные данные довольно обширны. Если вам нужно сохранить их в файл, все, что вам нужно сделать, это определить файл, в который будут помещены эти выходные данные. Что-то вроде этого:
curl -o medium.html https://medium.com
Вывод

Выполненная команда curl успешно загрузила HTML-содержимое веб-сайта Medium и сохранила его в файле с именем «medium.html» в вашем текущем каталоге. Вот что означает вывод:
100%: Это означает, что загрузка завершена и все данные успешно получены.120k: Размер загружаемых данных составляет примерно 120 килобайт.259k: это средняя скорость загрузки во время передачи. В данном случае это 259 килобайт в секунду.
Заголовки с использованием команды Curl
Команда curl -I используется для отправки запроса HTTP HEAD на URL-адрес, который получает только заголовки ответа без загрузки фактического содержимого. При запуске команды с URL-адресом сайта https://medium.com. Curl выдаст выходные данные, отображающие заголовки веб-сайта.
Ввод
curl -I https://medium.com
Вывод

В выводе в основном отображаются все заголовки, начиная от сервера и заканчивая его файлами cookie.
Поддерживаемые протоколы
- HTTP/HTTPS: Curl довольно хорошо справляется с выполнением HTTP- и HTTPS-запросов, которые являются основой веб-коммуникаций. Он может получать веб-страницы, взаимодействовать с веб-API и выполнять различные операции HTTP, такие как GET, POST, PUT, DELETE и другие.
- FTP/FTPS: Для передачи файлов Curl поддерживает как FTP (протокол передачи файлов), так и FTPS (безопасный FTP). Это облегчает эффективную передачу файлов между клиентами и серверами, обеспечивая целостность и безопасность данных.
- Telnet: Curl даже предлагает поддержку Telnet, позволяющую удаленный терминальный доступ к устройствам, подключенным к сети. Это особенно полезно для таких задач, как настройка сетевого оборудования.
- Другие: Curl также поддерживает различные другие протоколы, такие как RTMP (протокол обмена сообщениями в реальном времени), RTSP (протокол потоковой передачи в реальном времени), LDAP, MQTT (транспорт телеметрии очереди сообщений) и другие.
Загрузка файлов
Представьте себе такой сценарий: вы работаете в компании, которая составляет ежедневные отчеты о продажах в формате CSV. Вам необходимо автоматизировать процесс загрузки этих отчетов на FTP-сервер для дальнейшей обработки и анализа.
Как бы вы поступили с этим? Ну, один из способов — автоматизировать процесс загрузки файлов на FTP-сервер. Вот как вы можете этого добиться:
- Сценарий загрузки
Создайте сценарий (например, сценарий Bash или PowerShell), который генерирует ежедневный отчет о продажах в формате CSV, а затем использует Curl для загрузки файла на FTP-сервер. Сценарий будет выглядеть примерно так (пример Linux):
# Generate the daily sales report (example: sales_report_20230901.csv) generate_sales_report.sh # Use Curl to upload the file to the FTP server curl -T sales_report_20230901.csv ftp://ftp.example.com/sales/
В этом примере -T указывает локальный файл для загрузки на FTP-сервер, а ftp://ftp.example.com/sales/ — это URL-адрес FTP-сервера, на котором вы хотите разместить файл.
2. Автоматизация
Запланируйте ежедневный запуск этого сценария с помощью планировщика задач (например, cron в Linux или планировщика задач в Windows). Тем самым вы гарантируете, что ежедневный отчет о продажах автоматически генерируется и загружается на FTP-сервер без ручного вмешательства.
3. Обработка ошибок
Улучшите сценарий, включив в него обработку ошибок и уведомления. Например, если загрузка не удалась, сценарий может отправить оповещение по электронной почте, чтобы уведомить соответствующий персонал о проблеме.
Взаимодействие с API
Получить запросы
Основной синтаксис запроса GET будет следующим:
curl -X GET https://url
В этом примере мы будем использовать сайт гендеризации.io для достижения этой цели:
Ввод
curl -X GET https://api.genderize.io?name=Kim
Расшифровка команды:
-X GET: указывает, что метод запроса — GET. Хотя явное указание GET не требуется, оно делает команду более явной.https://api.genderize.io?name=Kim: это URL-адрес, к которому вы обращаетесь, где https://api.genderize.io — базовый URL-адрес, а ?name=Kim — параметр запроса. Вы передаете имя Ким в качестве входных данных в API для прогнозирования соответствующего пола.
Вывод
{
"name": "Kim",
"gender": "female",
"probability": 0.7,
"count": 83361
}
Опубликовать запросы
Чтобы выполнить базовый запрос POST, все, что вам нужно сделать, это ввести команду ниже:
curl -X POST https://example.com/
Дополнительные поля
curl -d "user=user1&pass=abcd" -X POST https://example.com/login
Разбивка команды ниже:
-d "user=user1&pass=abcd": Этот флаг указывает данные, которые будут включены в тело запроса. В этом случае мы отправляем строку данных в кодировке формы с двумя полями: «user» со значением «user1» и «pass» со значением «abcd».-X POST: Этот флаг явно указывает, что методом HTTP-запроса является POST. Хотя явное указание POST не требуется, посколькуcurlпо умолчанию используется запрос GET, если вы не указываете метод, он включен сюда, чтобы сделать метод запроса явным.
Когда вы запускаете эту команду curl, она отправляет POST-запрос на адрес https://example.com/login с предоставленными данными в теле запроса. Это распространенный способ имитировать отправку формы входа на веб-сервер.
Указание Content-Type в запросе POST
Флаг -H можно использовать для отправки определенного типа данных или заголовка с помощью Curl. Следующая команда отправляет объект JSON вместе с запросом.
curl -d '{json}' -H 'Content-Type: application/json' https://example.com/login
-d '{json}': Этот флаг указывает данные, которые будут включены в тело запроса. В этом случае у вас есть'json', заключенный в одинарные кавычки, что говорит о том, что вы собираетесь отправить данные JSON. Однако вам следует заменить'json'фактическими данными JSON, которые вы хотите отправить.
Например:
-d '{"user": "user1", "pass": "abcd"}'
Это представляет собой объект JSON с двумя парами ключ-значение: «пользователь» и «пароль».
-H 'Content-Type: application/json': этот флаг устанавливает для заголовка HTTP-запроса «Content-Type» значение «application/JSON». Этот заголовок сообщает серверу, что данные в теле запроса находятся в формате JSON.
Когда вы запустите эту команду curl с действительными данными JSON, она отправит запрос POST на https://example.com/login с предоставленными данными JSON в теле запроса, а заголовок Content-Type будет указывают, что контент имеет формат JSON. Сервер обработает запрос соответствующим образом, обычно обрабатывая процесс аутентификации входа и отвечая статусом входа или токеном аутентификации, в зависимости от функциональности сервера.
Отправка файла с помощью Curl
curl --form "[email protected]" https://example.com/resource.cgi
Код разбивки:
--form "[email protected]": Этот флаг указывает загрузку файла как часть запроса составной формы. Он использует символ@, чтобы указать, что вы хотите прикрепить файл к форме. «Загрузка файла» — это имя поля формы, а «my-file.txt» — это локальный файл, который вы хотите загрузить.
Когда вы запускаете эту команду curl, она инициирует POST-запрос к https://example.com/resource.cgi и включает файл my-file.txt как часть данных многочастной формы в поле загрузки файла. Сервер получит файл и сможет обработать его по мере необходимости. Фактическое поведение и ответ сервера будут зависеть от реализации сервера и цели сценария или конечной точки resource.cgi.
Ресурсы для использования
Хотя в этой статье представлен подробный обзор функций `curl`, важно знать, что `curl` — это универсальный инструмент с обширными возможностями. Чтобы расширить ваши знания о CURL, я бы рекомендовал посетить официальную документацию.