C是一種高級編程語言,被廣泛應(yīng)用于系統(tǒng)軟件和嵌入式系統(tǒng)中。今天我們來學(xué)習(xí)如何使用C模擬獲取JSON數(shù)據(jù)。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> //定義回調(diào)函數(shù) size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) { strcat(userdata, ptr); return size * nmemb; } int main(int argc, char* argv[]) { CURL *curl; CURLcode ret; char *json = (char*)malloc(sizeof(char)*512); char *url = "https://jsonplaceholder.typicode.com/todos/1"; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, json); ret = curl_easy_perform(curl); if(ret != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(ret)); } else { printf("%s\n", json); } free(json); curl_easy_cleanup(curl); } return 0; }
首先,我們需要包含必要的頭文件,例如stdio.h、stdlib.h、string.h和curl/curl.h。
然后,我們定義了一個(gè)回調(diào)函數(shù)。當(dāng)我們使用curl_easy_setopt()函數(shù)設(shè)置選項(xiàng)時(shí),它將立即生效,但數(shù)據(jù)傳輸并未開始。只有當(dāng)我們調(diào)用curl_easy_perform()函數(shù)時(shí),才會(huì)觸發(fā)數(shù)據(jù)傳輸。在數(shù)據(jù)傳輸期間,curl庫會(huì)反復(fù)調(diào)用回調(diào)函數(shù),每次傳遞一小塊數(shù)據(jù)。我們需要在回調(diào)函數(shù)中將這些數(shù)據(jù)的塊進(jìn)行拼接,最終形成完整的JSON字符串。
接著,我們初始化了一個(gè)CURL的句柄,并設(shè)置了三個(gè)選項(xiàng)。CURLOPT_URL選項(xiàng)指定我們要獲取JSON數(shù)據(jù)的URL地址。CURLOPT_WRITEFUNCTION選項(xiàng)將回調(diào)函數(shù)設(shè)置為數(shù)據(jù)寫入回調(diào)函數(shù)。最后,CURLOPT_WRITEDATA選項(xiàng)指定了一個(gè)指針userdata,它將被傳遞到我們的回調(diào)函數(shù)中。
在調(diào)用curl_easy_perform()函數(shù)后,我們檢查返回的CURLcode。如果它不是CURLE_OK,說明發(fā)生了錯(cuò)誤,我們需要輸出一個(gè)錯(cuò)誤消息。否則,我們將JSON字符串打印出來,并釋放它所使用的內(nèi)存。
CURL庫是一個(gè)流行的HTTP客戶端庫,可以方便地從Web服務(wù)器獲取JSON數(shù)據(jù)。將返回的JSON字符串解析為數(shù)據(jù)結(jié)構(gòu)后,我們可以使用它來完成各種任務(wù),例如驗(yàn)證API響應(yīng)是否符合預(yù)期、將數(shù)據(jù)存儲在數(shù)據(jù)庫中等。