Блог им. elektroyar

Братишка, я тебе покушать принёс
Чтобы сделать запрос, достаточно создать объект класса 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;
Почти все варианты настроек можно увидеть в примере ниже:
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;Библиотека 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!
