从curl_easy_perform()获取数据的libcurl问题

6 c curl libcurl

这可能是一个愚蠢的问题,但实际上,我怎么得到返回的网站数据curl_easy_perform()到一个变量,我可以工作.当它执行时,我只是在终端上看到它全部闪烁.顺便说一句,我正在使用C.

有任何想法吗?谢谢.

编辑: 这是我正在使用的代码(我正在访问Twitter Streaming API,我甚至正确地做到了吗?)

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://stream.twitter.com/1/statuses/filter.json?track=http");
curl_easy_setopt(curl, CURLOPT_USERPWD, "JEggers2:password");
    res = curl_easy_perform(curl);

    /* always cleanup */ 
    curl_easy_cleanup(curl);


  }   
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

cpx*_*cpx 5

要将数据转换为字符串,您需要设置写回调函数:

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback_func);
Run Code Online (Sandbox Code Playgroud)

此外,您的字符串变量的地址,以接收数据:

curl_easy_setopt(curl, CURLOPT_WRITEDATA, &str)
Run Code Online (Sandbox Code Playgroud)

回调函数看起来像这样:

size_t callback_func(void *ptr, size_t size, size_t count, void *stream)
{
      /* ptr - your string variable.
      stream - data chuck you received */

     printf("%.*s", size, (char*)stream);
}
Run Code Online (Sandbox Code Playgroud)

因为您不知道您将要接收的数据的总大小,所以您需要进行指针重新分配以将其转换为字符串.

  • NOOOOOOOOOO传递给回调的数据不是零终止.你不能也不能像那样对printf%s进行字符串操作.请参阅此示例,而不是http://curl.haxx.se/libcurl/c/getinmemory.html (3认同)