我正在尝试使用libcurl
c api从某个基于Web的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;
}
最佳答案
您需要修复回调以返回实际写入的字节数。来自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应该在其余的响应中再次调用函数。