static size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata)
{
FILE* stream = (FILE*)userdata;
if (!stream) {
printf("!!! No stream\n");
return 0;
}
size_t written = fwrite((FILE*)ptr, size, nmemb, stream);
return written;
}
unsigned char* HttpsRequest::requestOnlineImage(const char* url, int& resultLen)
{
FILE* fp = fopen("D:\\out.png", "wb");
if (!fp) {
printf("!!! Failed to create file on the disk\n");
return false;
}
unsigned char* result = NULL;
CURL* mCurl = curl_easy_init();
if (!mCurl) {
return NULL;
}
//struct curl_slist* mHeaders = NULL;
//mHeaders = curl_slist_append(mHeaders, "Cache-Control:max-age=0");
//mHeaders = curl_slist_append(mHeaders, "Connection:keep-alive");
//mHeaders = curl_slist_append(mHeaders, "*/*");
//mHeaders = curl_slist_append(mHeaders, "Host:cpi.cn-hangzhou.oss-pub.aliyun-inc.com");
// mHeaders = curl_slist_append(mHeaders, "User-Agent:com.yunos.map/pc");
//mHeaders = curl_slist_append(mHeaders, "Content-type:image/png");
//mHeaders = curl_slist_append(mHeaders, "Response-type:application/octet-stream");
//mHeaders = curl_slist_append(mHeaders, "Accept-Encoding:gzip, deflate");
struct MemoryStruct chunk;
chunk.memory = (unsigned char*)malloc(1);
chunk.size = 0;
curl_easy_setopt(mCurl, CURLOPT_URL, url);
//curl_easy_setopt(mCurl, CURLOPT_HTTPHEADER, mHeaders);
curl_easy_setopt(mCurl, CURLOPT_WRITEFUNCTION, callbackfunction);
curl_easy_setopt(mCurl, CURLOPT_WRITEDATA, fp);
CURLcode mRes = curl_easy_perform(mCurl);
if (mRes != CURLE_OK){
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(mRes));
}
else {
printf("%s\n", chunk.memory);
if (chunk.size > 0) {
result = (unsigned char*)malloc(chunk.size);
memcpy(result, chunk.memory, chunk.size);
resultLen = chunk.size;
}
}
curl_slist_free_all(mHeaders);
free(chunk.memory);
curl_easy_cleanup(mCurl);
mCurl = NULL;
return result;
}