#define CURL_STATICLIB // Для статической линковки #include #include #include "histogram.h" #include static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) { size_t real_size = size * nmemb; std::stringstream* buffer = static_cast(userp); buffer->write(static_cast(contents), real_size); return real_size; } Input download(const std::string& url) { CURL* curl = curl_easy_init(); std::stringstream buffer; if(!curl) { std::cerr << "Ошибка: не удалось инициализировать cURL" << std::endl; exit(EXIT_FAILURE); } curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); CURLcode res = curl_easy_perform(curl); if(res != CURLE_OK) { std::cerr << "Ошибка cURL (" << res << "): " << curl_easy_strerror(res) << std::endl; const char* url_info; if(curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &url_info) == CURLE_OK) { std::cerr << "URL: " << url_info << std::endl; } curl_easy_cleanup(curl); exit(EXIT_FAILURE); } if(buffer.str().empty()) { std::cerr << "Ошибка: получен пустой ответ от сервера" << std::endl; curl_easy_cleanup(curl); exit(EXIT_FAILURE); } curl_easy_cleanup(curl); return input_data(buffer, false); }