在C語言中,如果我們需要從一個Web服務(wù)API中獲取JSON格式的數(shù)據(jù),我們可以使用cURL庫來完成這個任務(wù)。以下是示例代碼:
#include#include #include #include #define BUFFER_SIZE (256 * 1024) //define buffer size int write_callback(char *buffer, size_t size, size_t nitems, void *userdata) { int segment_size = size * nitems; char* new_buffer = realloc(userdata, strlen(userdata) + segment_size + 1); if(new_buffer == NULL) { printf("Not enough memory.\n"); return 0; } memcpy(new_buffer + strlen(new_buffer), buffer, segment_size); new_buffer[strlen(new_buffer) + segment_size] = '\0'; return segment_size; } int request_json(const char* url, char* buffer) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, url); //set url curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); //follow location curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); //set callback curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer); res = curl_easy_perform(curl); if(res != CURLE_OK) { printf("curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); return 0; } curl_easy_cleanup(curl); } return 1; } int main() { char buffer[BUFFER_SIZE] = {0}; const char* url = "https://jsonplaceholder.typicode.com/posts/1"; //example URL request_json(url, buffer); printf("%s", buffer); //print JSON data return 0; }
代碼中,我們定義了一個回調(diào)函數(shù) `write_callback` ,用于在接收到JSON數(shù)據(jù)時將其存儲在內(nèi)存中。我們的主函數(shù) `request_json` 使用cURL庫來向給定的URL發(fā)出HTTP請求,并在接收到數(shù)據(jù)時調(diào)用回調(diào)函數(shù)來保存其內(nèi)容。最后,我們打印出存儲在buffer中的JSON數(shù)據(jù)。
需要注意的是,我們需要使用 `CURLOPT_FOLLOWLOCATION` 選項來確保該請求在遇到重定向時可以繼續(xù)執(zhí)行。同樣,我們也可以使用其他選項來設(shè)置HTTP頭,設(shè)置超時時間,等等。