如何存储curl响应c中的变量

时间:2015-05-21 11:41:53

标签: c http curl

我正在尝试使用c程序生成curl get请求。我需要将响应存储在变量中,并尝试使用以下代码。

#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>
function_pt(void *ptr, size_t size, size_t nmemb, void *stream){
char **response_ptr =  (char**)stream;
*response_ptr = strndup(ptr, (size_t)(size *nmemb));
}
int main(void)
{
  CURL *curl;
  CURLcode res;
  char *response =calloc(1,sizeof(char));
  curl = curl_easy_init();
    if(curl) {
          curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
          curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
          curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, function_pt);
          curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
          res=curl_easy_perform(curl);
          curl_easy_cleanup(curl);
          printf("%s\n",response);
            }

   return 0;
}

我从http get请求获得的数据是实时的,所以我需要以迭代的方式继续获取请求并将值存储在变量中,这样我才能在程序的所有其他部分使用数据。但以下代码只能运行一次然后退出。 我该怎么做?有没有其他方法可以生成http get请求?

1 个答案:

答案 0 :(得分:0)

如果您要calloc()原始字符串,则不需要strndup()指针,假设响应是字符串不好,因为这不一定是真的。

我会建议一个结构,你也可以存储响应的长度,所以如果它不是文本但是例如jpeg文件,不会发生任何不好的事情,你不应该调用printf()除非您从响应标头中检查响应确实是文本,并且它将nul终止afaik。