Toast/TriviaBot/bot/http/HTTPHelper.cpp
2016-07-05 00:51:53 +01:00

44 lines
1.3 KiB
C++

#include "HTTPHelper.hpp"
size_t HTTPHelper::data_write(void* buf, size_t size, size_t nmemb, void* userp) {
if (userp) {
std::ostream& os = *static_cast<std::ostream*>(userp);
std::streamsize len = size * nmemb;
if (os.write(static_cast<char*>(buf), len)) {
return len;
}
}
return 0;
}
CURLcode HTTPHelper::curl_read(const std::string& url, std::ostream& os, long timeout = 30) {
CURLcode code(CURLE_FAILED_INIT);
CURL* curl = curl_easy_init();
if (curl) {
if (CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &data_write))
&& CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L))
&& CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L))
&& CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_FILE, &os))
&& CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout))
&& CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_URL, url.c_str()))) {
code = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);
}
return code;
}
std::string HTTPHelper::read_url(std::string url) {
std::ostringstream oss;
std::string html = "ERROR";
if (CURLE_OK == curl_read("http://www.google.co.uk/", oss)) {
html = oss.str();
}
else {
std::cout << "CURL error" << std::endl;
}
return html;
}