在C語言中,如果我們需要從一個Web服務API中獲取JSON格式的數據,我們可以使用cURL庫來完成這個任務。以下是示例代碼:
#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; }
代碼中,我們定義了一個回調函數 `write_callback` ,用于在接收到JSON數據時將其存儲在內存中。我們的主函數 `request_json` 使用cURL庫來向給定的URL發出HTTP請求,并在接收到數據時調用回調函數來保存其內容。最后,我們打印出存儲在buffer中的JSON數據。
需要注意的是,我們需要使用 `CURLOPT_FOLLOWLOCATION` 選項來確保該請求在遇到重定向時可以繼續執行。同樣,我們也可以使用其他選項來設置HTTP頭,設置超時時間,等等。