Curl — утилита передачи данных по сетевым протоколам¶
Curl (стилизуется как cURL) — утилита командной строки и библиотека (libcurl) для передачи данных по различным сетевым протоколам. Используется для выполнения HTTP-запросов, загрузки и отправки файлов, тестирования API и автоматизации взаимодействия с веб-сервисами. Поддерживает более 25 протоколов, включая HTTP, HTTPS, FTP, SCP, SFTP, SMTP, POP3, IMAP, LDAP, MQTT и другие. Распространяется на условиях лицензии MIT, доступна для всех основных операционных систем — Linux, macOS, Windows, BSD, а также для встраиваемых систем.
¶История
Разработку curl начал шведский программист Даниэль Стенберг (Daniel Stenberg) в 1998 году. Первая версия была написана на языке C и изначально представляла собой простой скрипт для скачивания файлов с IRC-каналов. Название curl расшифровывается как «Client for URLs» (клиент для URL). Стенберг продолжает оставаться главным разработчиком проекта.
Проект развивается как open-source; исходный код доступен на GitHub. С 2000-х годов curl стал одной из наиболее широко распространённых утилит в Unix-подобных системах — она предустановлена в большинстве дистрибутивов Linux и в macOS. По данным самого проекта, библиотека libcurl встроена в миллиарды устройств, включая смартфоны, телевизоры, приставки, автомобили и встраиваемые системы.
¶Возможности
Curl поддерживает работу со следующими протоколами (основные):
| Протокол | Назначение |
|---|---|
| HTTP / HTTPS | Веб-запросы, работа с API |
| FTP / FTPS | Передача файлов |
| SCP / SFTP | Передача файлов по SSH |
| SMTP / SMTPS | Отправка почты |
| POP3 / POP3S | Получение почты |
| IMAP / IMAPS | Доступ к почтовым ящикам |
| LDAP | Запросы к каталогам |
| MQTT | Обмен сообщениями в IoT |
| WebSocket | Дуплексная связь (с версии 7.86) |
| TELNET, RTSP, DICT, FILE, GOPHER | Прочие задачи |
Среди ключевых возможностей:
- выполнение всех основных HTTP-методов — GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS;
- работа с заголовками, cookies, базовой и digest-аутентификацией, OAuth, клиентскими сертификатами;
- поддержка прокси-серверов, включая SOCKS4, SOCKS5 и HTTP-прокси;
- возобновление прерванных загрузок (флаг
-C -); - ограничение скорости передачи, повтор запросов при ошибках (
--retry); - передача данных из файлов и из стандартного ввода;
- работа с TLS-сертификатами, включая пиннинг публичных ключей.
¶Примеры использования
Базовый запрос к веб-странице:
`` curl https://example.com ``
Отправка POST-запроса с JSON-данными:
`` curl -X POST -H "Content-Type: application/json" \ -d '{"name":"test"}' https://api.example.com/users ``
Сохранение ответа в файл:
`` curl -o output.html https://example.com ``
Передача файлов по SFTP:
`` curl -T file.txt sftp://server.example.com/path/ ``
Просмотр подробной информации о запросе и ответе (заголовки, код ответа, время выполнения):
`` curl -v -I https://example.com ``
¶Curl и libcurl
Curl как команда представляет собой обёртку над библиотекой libcurl. Библиотека написана на C и может быть подключена к программам на разных языках — Python, PHP, Ruby, Java, Go и других. Многие популярные инструменты и фреймворки используют libcurl «под капотом»: например, Git при работе с HTTPS-репозиториями (если не скомпилирован с использованием иной библиотеки), плеер VLC для потоковой передачи, инструменты мониторинга и сбора метрик.
¶Безопасность
Curl регулярно обновляется в связи с обнаружением уязвимостей. Наиболее известный инцидент — уязвимость CVE-2023-38545 (так называемый «SOCKS5 heap buffer overflow»), обнаруженная в 2023 году в компоненте обработки SOCKS5-прокси. Ошибка существовала с 2016 года и была исправлена в версии 8.4.0. Проект поддерживает стабильный цикл выпуска обновлений и публикует подробные бюллетени безопасности.
¶Влияние
Curl стал де-факто стандартом для выполнения HTTP-запросов из командной строки. В 2023 году Даниэль Стенберг отмечал, что curl выполняется миллиарды раз ежедневно по всему миру. Утилита активно используется системными администраторами, DevOps-инженерами и разработчиками для отладки, мониторинга и автоматизации. В её честь назван формат файла .curlrc (конфигурационный файл пользователя) и проводится ежегодный «World curl Day» (16 августа).
¶Источники
- Официальный сайт проекта curl (curl.se)
- Репозиторий проекта на GitHub (curl/curl)
- Документация по использованию curl (man-страница curl)
- Бюллетени безопасности проекта curl
- Публикации Даниэля Стенберга о развитии проекта
