首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对cURL的IDN支持未启用

对cURL的IDN支持未启用
EN

Stack Overflow用户
提问于 2015-08-11 21:02:33
回答 1查看 481关注 0票数 0

我遇到了一些问题,用cURL将图像输入到动态内存缓冲区。

使用的代码如下:

代码语言:javascript
复制
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;
}

作为一个错误输出,我得到了以下错误:

但是,我不确定是否理解正在显示的错误。我猜我应该启用IDN对curl的支持吗?不过,我不知道如何进行。这是否意味着我必须重新编译启用IDN的库?(如果我找到怎么做的话)

谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-11 21:22:10

您正在将一个std::string对象传递给curl_easy_setopt,而您应该传递一个C字符串。它实际上是在试图解决天知道的问题。

代码语言:javascript
复制
curl_easy_setopt(curl, CURLOPT_URL, everything.c_str());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31951879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档