我正在尝试使用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请求?
答案 0 :(得分:0)
如果您要calloc()
原始字符串,则不需要strndup()
指针,假设响应是字符串不好,因为这不一定是真的。
我会建议一个结构,你也可以存储响应的长度,所以如果它不是文本但是例如jpeg
文件,不会发生任何不好的事情,你不应该调用printf()
除非您从响应标头中检查响应确实是文本,并且它将nul
终止afaik。