Блог им. elektroyar

Kurlyk - еще одна С++ обертка для curl

В общем, нужна была мне библиотека для более удобного использования curl. Нашел библиотеки, которые были более менее удобные, но работают без curl, а тащить еще зависимостей в проект ради них не хотелось. Готовых же оберток вокруг curl было полно, но мне они не понравились, да и велосипед хотелось построить.

И придумал тогда я библиотеку Kurlyk.
Kurlyk - еще одна С++ обертка для curl

Описание

Братишка, я тебе покушать принёс


Фраза из артхаусного фильма “Зелёный слоник”

Что такое kurlyk? Да это же еще одна библиотека для более простой работы с curl! Если вас по тем или иным причинам не устроили библиотеки easyhttp-cpp, curl_request, curlpp-async, curlwrapper, curl-Easy-cpp, curlpp11, easycurl, curl-cpp-wrapper... То может быть, стоит попробовать эту?

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

Чтобы сделать запрос, достаточно создать объект класса kurlyk::Client и настроить все необходимое в  config или через методы класса. Затем можно вызывать подходящий вам метод.

Самый основной метод, который подходит под все виды запросов - request. Данный метод содержит все необходимые параметры для осуществления любого типа запроса, будь то GET, POST, PUT, DELETE.

Пример с GET запросом:

std::cout << "Returns Origin IP, v1" << std::endl;
kurlyk::Client client("https://httpbin.org");
client.config.sert_file = "curl-ca-bundle.crt";
client.config.header = true;    // debug
client.config.verbose = true;   // debug
long err = client.request(
		"GET",              // method
		"/ip",              // path
		kurlyk::Arguments(),// args
		std::string(),      // content
		kurlyk::Headers(),  // headers
		[&](const kurlyk::Output &output) { // lambda

	std::cout << "response: " << std::endl << output.response << std::endl;
	std::cout << "curl code: " << output.curl_code << std::endl;
	std::cout << "response code: " << output.response_code << std::endl;
});
std::cout << "error curl code: " << err << std::endl << std::endl;

Для более простого обращения с запросами есть упрощенные методы

std::cout << "Returns Origin IP, v2" << std::endl;
kurlyk::Client client("https://httpbin.org", true);
std::cout << "response:" << std::endl << client.get("/ip", kurlyk::Headers()) << std::endl;
std::cout << "response:" << std::endl << client.get("/ip") << std::endl;

Максимум возможностей

Kurlyk - еще одна С++ обертка для curl

Почти все варианты настроек можно увидеть в примере ниже:

std::cout << "Returns GET data, v2" << std::endl;
kurlyk::Client client("https://httpbin.org");

client.config.sert_file = "curl-ca-bundle.crt";
client.config.user_agent = "Agent 007";
client.config.timeout = 5;

// настроим прокси
client.config.proxy_ip = "89.212.193.253";
client.config.proxy_port = 65238;
client.config.proxy_username = "user_admin";
client.config.proxy_password = "12345";
//client.config.proxy_type = kurlyk::ProxyTypes::HTTPS;
client.config.proxy_type = kurlyk::ProxyTypes::SOCKS5;
		
// установим строку с cookie
// client.add_cookie("author", "green-elephant"); - еще один вариант установки cookie
client.config.cookie = "elephant=Green";
// включим использование cookie
client.config.use_cookie = true;
// отключим использование файла cookie, хранение данных cookie будет в ОЗУ
// вызвать clear_cookie_buffer() если данные ОЗУ надо очистить перед использованием
client.config.use_cookie_file = false;
// имя файла cookie для curl, в данном примере не будет задействовоан
// вызвать client.clear_cookie_file() если данные файла надо очистить перед использованием
client.config.cookie_file = "simple-cookie.txt";

// прочие настройки
client.config.auto_referer = true;
client.config.follow_location = true;
client.config.max_redirects = 10;

// укажем кодировку
client.config.use_accept_encoding = true;
client.config.use_brotli_encoding = true;
client.config.use_deflate_encoding = false;
client.config.use_gzip_encoding = false;
client.config.use_identity_encoding = false;

// включим режим отладки
client.config.header = true;    // debug
client.config.verbose = true;   // debug

// добавим заголовки
kurlyk::Headers headers;
headers.emplace("Heron", "kurlyk-kurlyk");
headers.emplace("Green", "elephant");

// добавим аргументы
kurlyk::Arguments arguments;
arguments.emplace("elephant", "green");

long err = client.request(
		"GET", // тип запроса
		"/get",
		arguments,
		headers,
		[&](const kurlyk::Output &output) {
	std::cout << "response: " << std::endl << output.response << std::endl;
	std::cout << "curl code: " << output.curl_code << std::endl;
	std::cout << "response code: " << output.response_code << std::endl;
});
std::cout << "curl code: " << err << std::endl << std::endl;

Дополнительные возможности

1. Защищенные файлы cookie

Библиотека kurlyk может сохранять cookie в зашифрованном виде, в отличии от стандартного движка cookie библиотеки curl. Для шифрования используется агоритм AES.

Чтобы добавить поддержку защищенных файлов cookie, укажите следующий define:

#define KYRLUK_AES_SUPPORT

Класс Client получит дополнительные методы:

bool clear_protected_file_cookie()
bool save_protected_file_cookie()
bool open_protected_file_cookie()

Также класс Client пополнится двумя настройками:

kurlyk::Client client("https://example.org"); // просто пример

//...

client.config.key; // std::array<uint8_t, 32>
client.config.cookie_protected_file; // std::string

Для использования защищенных файлов cookie используйте вышеперечисленные методы и настройки. Не забудьте установить также следующие параметры:

kurlyk::Client client("https://example.org"); // просто пример

//...

client.config.use_cookie = true;
client.config.use_cookie_file = false;

Внимание! Данный вариант использования cookie не работает с переадресацией!

2. cookie без файлов

Библиотека kurlyk может сохранять cookie без использования файлов, внутри специального буфера класса Client. Не забудьте установить следующие параметры, чтобы использовать cookie без использования файлов:

kurlyk::Client client("https://example.org"); // просто пример

//...

client.config.use_cookie = true;
client.config.use_cookie_file = false;

Внимание! Данный вариант использования cookie не работает с переадресацией!


Сборка

Библиотека kurlyk разработана как header-only. Однако, для ее работы нужен curl и OpenSSL. Если вы компилируете при помощи mingw, я рекомендую использовать готовые сборки curl и OpenSSL. Сборки данных библиотек, на которых тестировалась работа kurlyk, находятся как субмодули в папке lib.

Первоисточник сборок:

Одним словом, kurlyk!
Kurlyk - еще одна С++ обертка для curl

1.1К | ★1

Читайте на SMART-LAB:
Инвестиции без спешки: торгуем в выходные
Рынок часто движется импульсами, и тем важнее оценивать активы без спешки, не отвлекаясь на инфошум. Для этого отлично подходят выходные дни. В...
Фото
Россети Ленэнерго. Отчет об исполнении инвестпрограммы за Q4 2025г. Опасения оправдались - обесценение съело прибыль
Компания Россети Ленэнерго опубликовала отчет об исполнении инвестпрограммы за Q4 2025г., где показаны финансовые показатели компании по...
Фото
Позитив: вчера, сегодня, завтра
На этой неделе Максим Филиппов, заместитель гендиректора Positive Technologies, и Юрий Мариничев, IR-директор, побывали в гостях у SberCIB. В...
Фото
Россети Центр. Отчет об исполнении инвестпрограммы за Q4 2025г. Ожидаемо снизилась дивидендная база по РСБУ.
Компания Россети Центр опубликовала отчет об исполнении инвестпрограммы за Q4 2025г., где показаны финансовые показатели компании по РСБУ в...

теги блога elektroyar

....все тэги



UPDONW
Новый дизайн