我正在尝试使用libcurl
c api从某个基于网络的api获取一些数据。
Curl称api很好。但是,size_t nmemb
太小而无法容纳回复。不知怎的,它在1280被“切断”。有谁知道如何解决这个问题? size_t size
也是1 ..
这些是我使用的功能:
int http_call(char *url) {
CURL *curl;
FILE *curlfile;
CURLcode res;
char outfilename[FILENAME_MAX] = "/usr/local/var/log/ndcurl";
curl = curl_easy_init();
if (curl) {
curlfile = fopen(outfilename,"w");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_release_data);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(curlfile);
}
return 0;
}
回调:
static size_t write_release_data(void *buffer, size_t size, size_t nmemb, void *userp) {
char **response_ptr = (char**)userp;
*response_ptr = strndup(buffer, (size_t)(size *nmemb));
printf("The Response: %s", *response_ptr);
return 0;
}
答案 0 :(得分:1)
您需要修复回调以返回写入的实际字节数。来自the documentation
将指针传递给与以下原型匹配的函数:
size_t function( char *ptr, size_t size, size_t nmemb, void *userdata);
只要收到需要保存的数据,libcurl就会调用此函数。指向的数据大小ptr
size
与nmemb
相乘,不会终止为零。 返回实际处理的字节数。如果该数量 与传递给您的函数的金额不同,它会发出错误信号 去图书馆。这将中止转移和返回CURLE_WRITE_ERROR
。
如果您返回size * nmemb
,libcurl应该使用其余的响应再次调用您的函数。