卷曲内存缓冲区大小太小

时间:2012-06-15 07:46:11

标签: c curl libcurl

我正在尝试使用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;

}

1 个答案:

答案 0 :(得分:1)

您需要修复回调以返回写入的实际字节数。来自the documentation

  

将指针传递给与以下原型匹配的函数:   size_t function( char *ptr, size_t size, size_t nmemb, void *userdata);只要收到需要保存的数据,libcurl就会调用此函数。指向的数据大小   ptr sizenmemb相乘,不会终止为零。   返回实际处理的字节数。如果该数量   与传递给您的函数的金额不同,它会发出错误信号   去图书馆。这将中止转移和返回   CURLE_WRITE_ERROR

如果您返回size * nmemb,libcurl应该使用其余的响应再次调用您的函数。