0
我想從某個基於web的API使用libcurl
c 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;
}
它也可以指出,回調將被稱爲多次,直到所有數據已交付 –
好吧,它現在有效。還有一個問題:我需要將完整的響應傳遞給另一個函數。我會怎麼做? –
您需要將響應緩存在某處(使用'malloc'創建的全局文件,磁盤上的文件等)並等待curl將其發送給您。您必須閱讀捲曲文檔以瞭解它如何表示傳輸已完成。如果您要傳輸多個網址,請在回調函數中使用'userdata'參數來跟蹤狀態。 – tomlogic