#include <curl.h>
#define XML_MAX_SIZE 1024*16
char gbuf[XML_MAX_SIZE] = {0};
int len = 0;
static size_t string_write(char *ptr, size_t size, size_t nmemb, char *buf)
{
pthread_mutex_lock(&write_mutex);
size_t total = size * nmemb;
if(total > 0 && ptr != NULL)
{
strcpy(gbuf + len, ptr);
len += total;
}
pthread_mutex_unlock(&write_mutex);
return total;
}
void getSimple(char * url)
{
CURL *curl;
curl_global_init(CURL_GLOBAL_ALL);
curl=curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, string_write);
// curl_easy_setopt(curl, CURLOPT_WRITEDATA, gbuf);
}
curl_easy_perform(curl);
curl_easy_cleanup(curl);
return ;
}
C++ 11
static size_t string_write(char *ptr, size_t size, size_t nmemb, string &str)
{
size_t total = size * nmemb;
if (total)
str.append(ptr, total);
return total;
}
QString CurlSimple::getSimple(QString url)
{
auto curl_deleter = [](CURL* curl) {
curl_easy_cleanup(curl);
};
string strCurlGet;
using Curl = unique_ptr<CURL, decltype(curl_deleter)>;
Curl curl{ curl_easy_init(), curl_deleter };
if (curl) {
curl_easy_setopt(curl.get(), CURLOPT_URL, url.toStdString().c_str());
curl_easy_setopt(curl.get(), CURLOPT_WRITEFUNCTION, string_write);
curl_easy_setopt(curl.get(), CURLOPT_WRITEDATA, &strCurlGet);
CURLcode code = curl_easy_perform(curl.get());
strReceive = QString::fromStdString(strCurlGet);
}
return strReceive;
}