libcurl

Мощная кроссплатформенная библиотека для передачи данных по URL, поддерживающая множество сетевых протоколов. Она предоставляет простой и эффективный интерфейс для выполнения сетевых запросов, обработки ответов и работы с сетевыми протоколами. Библиотека широко используется в клиентских и серверных приложениях для реализации сетевых операций.

Особенности

  • поддержка множества протоколов: HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, LDAP, TELNET и других;
  • поддержка SSL/TLS через различные backends (OpenSSL, LibreSSL, Schannel, Secure Transport и др.);
  • возможность работы через прокси (HTTP, SOCKS, HTTPS);
  • поддержка аутентификации (Basic, Digest, NTLM, Kerberos, OAuth и др.);
  • возможность работы с cookies, заголовками и перенаправлениями.

Основные компоненты

libcurl предоставляет богатый набор функций для выполнения сетевых операций, управления соединениями и обработки данных (подробнее с документацией можно ознакомиться здесь).

Инициализация и управление сессиями

Библиотека использует концепцию "easy interface" для простых синхронных операций и "multi interface" для асинхронных операций. Каждая операция начинается с создания сессии (CURL handle), которая настраивается параметрами и затем выполняется.

Основные функции управления сессиями:

  • curl_easy_init() — создание нового easy handle для синхронных операций;
  • curl_easy_setopt() — настройка параметров запроса (URL, заголовки, данные и др.);
  • curl_easy_perform() — выполнение запроса (блокирующий вызов);
  • curl_easy_cleanup() — освобождение ресурсов easy handle;
  • curl_global_init() и curl_global_cleanup() — глобальная инициализация и деинициализация библиотеки.

Поддержка множества протоколов

libcurl поддерживает широкий спектр протоколов, что позволяет использовать единый API для различных сетевых операций. Для каждого протокола библиотека предоставляет специфические настройки и возможности.

Ключевые протоколы:

  • HTTP/HTTPS: полная поддержка HTTP/1.1, HTTP/2, HTTP/3 (QUIC), методы запросов, заголовки, cookies, аутентификация;
  • FTP/FTPS: загрузка и выгрузка файлов, работа с директориями, пассивный и активный режимы;
  • SCP/SFTP: безопасная передача файлов через SSH;
  • SMTP/IMAP/POP3: отправка и получение электронной почты;
  • LDAP: работа с каталогами;
  • RTSP: потоковое мультимедиа;
  • MQTT: обмен сообщениями для IoT.

Работа с данными и callback-функции

libcurl использует callback-функции для обработки полученных данных, что позволяет эффективно работать с большими объемами информации без необходимости сохранения всего ответа в памяти.

Основные callback-функции:

  • CURLOPT_WRITEFUNCTION — callback для записи полученных данных (например, в файл или буфер);
  • CURLOPT_HEADERFUNCTION — callback для обработки заголовков ответа;
  • CURLOPT_READFUNCTION — callback для чтения данных, отправляемых на сервер (например, при POST);
  • CURLOPT_PROGRESSFUNCTION — callback для отслеживания прогресса передачи;
  • CURLOPT_DEBUGFUNCTION — callback для отладочной информации.

Управление соединениями и производительностью

Библиотека предоставляет множество настроек для оптимизации производительности и управления сетевыми соединениями. Это включает пул соединений, keep-alive, таймауты и лимиты.

Функции управления соединениями:

  • curl_easy_setopt() с CURLOPT_TIMEOUT, CURLOPT_CONNECTTIMEOUT — установка таймаутов;
  • CURLOPT_MAXCONNECTS — ограничение количества соединений в пуле;
  • CURLOPT_TCP_KEEPALIVE — включение keep-alive для TCP-соединений;
  • CURLOPT_BUFFERSIZE — размер буфера для чтения/записи;
  • CURLOPT_ACCEPT_ENCODING — поддержка сжатия данных (gzip, deflate).

Безопасность и SSL/TLS

libcurl поддерживает различные backends для SSL/TLS, что позволяет использовать библиотеку в разных средах. Библиотека также предоставляет настройки для проверки сертификатов и управления безопасностью соединений.

Функции безопасности:

  • CURLOPT_SSL_VERIFYPEER и CURLOPT_SSL_VERIFYHOST — проверка сертификатов сервера;
  • CURLOPT_CAINFO и CURLOPT_CAPATH — указание CA-сертификатов;
  • CURLOPT_SSLCERT и CURLOPT_SSLKEY — использование клиентских сертификатов;
  • CURLOPT_SSL_CIPHER_LIST — выбор шифров;
  • Поддержка TLS 1.2, TLS 1.3 и других протоколов.

Асинхронные операции и multi interface

Для выполнения нескольких сетевых операций одновременно или в асинхронном режиме libcurl предоставляет multi interface. Этот интерфейс позволяет управлять несколькими easy handles в одном потоке или нескольких потоках.

Функции multi interface:

  • curl_multi_init() — создание multi handle;
  • curl_multi_add_handle() — добавление easy handle к multi handle;
  • curl_multi_perform() — выполнение операций (неблокирующий вызов);
  • curl_multi_fdset() — получение файловых дескрипторов для использования с select/poll;
  • curl_multi_wait() — ожидание активности на соединениях;
  • curl_multi_info_read() — получение информации о завершенных операциях;
  • curl_multi_remove_handle() и curl_multi_cleanup() — удаление handles и очистка.

Работа с заголовками и cookies

libcurl предоставляет удобные средства для работы с HTTP-заголовками и cookies. Библиотека может автоматически обрабатывать cookies, сохраняя их между запросами, и позволяет управлять заголовками запросов и ответов.

Функции для заголовков и cookies:

  • CURLOPT_HTTPHEADER — установка пользовательских заголовков запроса;
  • CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR — загрузка и сохранение cookies из/в файл;
  • CURLOPT_COOKIELIST — прямое управление списком cookies;
  • curl_easy_getinfo() с CURLINFO_COOKIELIST — получение списка cookies;
  • CURLOPT_HEADER — включение заголовков ответа в тело данных.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "libcurl/8.11.1@aurora",
    )    

Процесс локальной сборки описан в документации.

libcurl

command line tool and library for transferring data with URLs
Лицензия
curl
Версия
Домашняя страница
Скачать
x86_64
575.78 Kb
MD5: e798a15cd2f3b200e5715621718cb842
Updated: 04.09.2025, 10:34:02
armv7
529.16 Kb
MD5: 7aa3573430db4ef7eb9c77c3a3e546ac
Updated: 04.09.2025, 10:34:00
armv8
566.69 Kb
MD5: 7e819a00c6c04086fecb0288e4f0735e
Updated: 04.09.2025, 10:33:47
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.