// // requester.cpp // curly // // Created by Bob Polis at 2020-09-01 // Copyright (c) 2020 SwiftCoder. All rights reserved. // #include "requester.hpp" #include #include #include #include extern sc::logger logger; size_t requester::write_data(char *buf, size_t sz, size_t nmemb, void *user_data) { size_t realsize = sz * nmemb; SCInfo(logger, "received ", realsize, " bytes"); std::string* text {reinterpret_cast(user_data)}; text->append(buf, realsize); return realsize; } requester::requester() { curl_global_init(CURL_GLOBAL_ALL); _h.reset(curl_easy_init()); curl_easy_setopt(_h.get(), CURLOPT_WRITEFUNCTION, write_data); } requester::~requester() { curl_global_cleanup(); } std::string requester::get(const std::string &url) { std::string text; curl_easy_setopt(_h.get(), CURLOPT_URL, url.c_str()); curl_easy_setopt(_h.get(), CURLOPT_WRITEDATA, &text); auto success = curl_easy_perform(_h.get()); if (success != CURLE_OK) throw std::runtime_error("could not get remote data"); return text; }