2015-08-11 2 views
0

У меня возникла проблема с получением изображения в буфер динамической памяти cURL.Поддержка IDN не включена для cURL

бита кода используется следующий:

struct memoryStruct { 
    char *memory; 
    size_t size; 
}; 

static void* CURL_realloc(void *ptr, size_t size) 
{ 
    /* There might be a realloc() out there that doesn't like reallocing 
    NULL pointers, so we take care of it here */ 
    if(ptr) 
    return realloc(ptr, size); 
    else 
    return malloc(size); 
} 

size_t WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) 
{ 
    size_t realsize = size * nmemb; 
    struct memoryStruct *mem = (struct memoryStruct *)data; 

    mem->memory = (char *)CURL_realloc(mem->memory, mem->size + realsize + 1); 

    if (mem->memory) 
    { 
    memcpy(&(mem->memory[mem->size]), ptr, realsize); 
    mem->size += realsize; 
    mem->memory[mem->size] = 0; 
    } 

    return realsize; 
} 




int main() 
{ 
    std::string everything = "https://upload.wikimedia.org/wikipedia/commons/1/1e/Stonehenge.jpg"; 
    CURL *curl;  // CURL objects 
    CURLcode res; 
    memoryStruct buffer; // memory buffer 

    curl = curl_easy_init(); // init CURL library object/structure 

    if(curl) { 

     // set up the write to memory buffer 
     // (buffer starts off empty) 

     buffer.memory = NULL; 
     buffer.size = 0; 

     // (N.B. check this URL still works in browser in case image has moved) 

     curl_easy_setopt(curl, CURLOPT_URL, everything); 
     curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); // tell us what is happening 

     // tell libcurl where to write the image (to a dynamic memory buffer) 

     curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION, WriteMemoryCallback); 
     curl_easy_setopt(curl,CURLOPT_WRITEDATA, (void *) &buffer); 

     // get the image from the specified URL 

     res = curl_easy_perform(curl); 


     curl_easy_cleanup(curl); 
     free(buffer.memory); 

    } 
    return 0; 
} 

Как вывод ошибки я получаю сообщение об ошибке сказав следующее: enter image description here

Однако я не уверен, чтобы понять, что отображается ошибка. Я предполагаю, что я должен включить поддержку IDN для завитки? Однако я не уверен, как действовать. Означает ли это, что мне придется перекомпилировать библиотеку с поддержкой IDN? (Если я найду, как это сделать)

Спасибо за вашу помощь

ответ

1

Вы пропускание std::string объекта curl_easy_setopt, в то время как вы должны передать строку C. Это на самом деле пытается решить бог-знает-что.

curl_easy_setopt(curl, CURLOPT_URL, everything.c_str()); 

 Смежные вопросы

  • Нет связанных вопросов^_^