Открыть сервисСервис

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
  • Публикации Даниэля Стенберга о развитии проекта
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru