Refactor: perform and check status in sep funcs

This commit is contained in:
Bob Polis 2024-03-31 14:39:35 +02:00
parent 6232f9d593
commit 8a7f92179d
3 changed files with 23 additions and 19 deletions

View File

@ -1,7 +1,7 @@
LDLIBS := -lcurl -lsclogging -lscterm LDLIBS := -lcurl -lsclogging -lscterm
MAJOR := 1 MAJOR := 1
MINOR := 0 MINOR := 1
PATCH := 1 PATCH := 0
GENERATELIBHEADER := 1 GENERATELIBHEADER := 1

View File

@ -45,20 +45,8 @@ requester& requester::operator=(requester&& other) {
std::string requester::get(const std::string &url) { std::string requester::get(const std::string &url) {
_text = ""; _text = "";
curl_easy_setopt(_h.get(), CURLOPT_URL, url.c_str()); curl_easy_setopt(_h.get(), CURLOPT_URL, url.c_str());
curl_easy_setopt(_h.get(), CURLOPT_WRITEDATA, this); perform();
auto success = curl_easy_perform(_h.get()); check_status(200);
if (success != CURLE_OK) {
std::ostringstream oss;
oss << "could not get remote data: " << curl_easy_strerror(success);
throw std::runtime_error {oss.str()};
}
long status;
success = curl_easy_getinfo(_h.get(), CURLINFO_RESPONSE_CODE, &status);
if (success != CURLE_OK || status != 200) {
std::ostringstream oss;
oss << "could not get remote data (" << status << ")";
throw std::runtime_error {oss.str()};
}
return _text; return _text;
} }
@ -72,14 +60,26 @@ std::string requester::post(const std::string& url, const std::string& json) {
headers = curl_slist_append(headers, "Content-Type: application/json"); headers = curl_slist_append(headers, "Content-Type: application/json");
std::unique_ptr<struct curl_slist, void(*)(struct curl_slist*)> hdrs {headers, curl_slist_free_all}; std::unique_ptr<struct curl_slist, void(*)(struct curl_slist*)> hdrs {headers, curl_slist_free_all};
curl_easy_setopt(_h.get(), CURLOPT_HTTPHEADER, headers); curl_easy_setopt(_h.get(), CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(_h.get(), CURLOPT_WRITEDATA, this); perform();
return _text;
}
void requester::perform() {
_text = ""; _text = "";
curl_easy_setopt(_h.get(), CURLOPT_WRITEDATA, this);
auto success = curl_easy_perform(_h.get()); auto success = curl_easy_perform(_h.get());
if (success != CURLE_OK) { if (success != CURLE_OK) {
std::ostringstream oss; std::ostringstream oss;
oss << "could not post data: " << curl_easy_strerror(success); oss << "could not perform request: " << curl_easy_strerror(success);
throw std::runtime_error {oss.str()};
}
}
void requester::check_status(long status) {
auto success = curl_easy_getinfo(_h.get(), CURLINFO_RESPONSE_CODE, &_status);
if (success != CURLE_OK || _status != status) {
std::ostringstream oss;
oss << "could not get remote data (" << _status << ")";
throw std::runtime_error {oss.str()}; throw std::runtime_error {oss.str()};
} }
return _text;
} }

View File

@ -38,6 +38,10 @@ namespace sc {
std::unique_ptr<CURL, void(*)(CURL*)> _h {nullptr, curl_easy_cleanup}; std::unique_ptr<CURL, void(*)(CURL*)> _h {nullptr, curl_easy_cleanup};
sc::logger* _logger {nullptr}; sc::logger* _logger {nullptr};
std::string _text; std::string _text;
long _status;
void perform();
void check_status(long status);
}; };
} }