在C開發(fā)中,處理HTTP請(qǐng)求是一項(xiàng)常見的任務(wù)。其中,使用HTTP GET請(qǐng)求拉取JSON數(shù)據(jù)是一種常用的方法。本文將介紹如何使用C語(yǔ)言進(jìn)行HTTP GET請(qǐng)求,并處理返回的JSON數(shù)據(jù)。
#include#include #include // 回調(diào)函數(shù)將返回的數(shù)據(jù)保存到buffer中 size_t write_data(void* buffer, size_t size, size_t nmemb, void* userp) { size_t realsize = size * nmemb; char* data = (char*)malloc(realsize + 1); memcpy(data, buffer, realsize); data[realsize] = 0; strcat((char*)userp, data); free(data); return realsize; } int main(void) { CURL* curl; CURLcode res; char buffer[2048] = {0}; // JSON數(shù)據(jù)最大大小 curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/json_data"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } curl_easy_cleanup(curl); } printf("返回的JSON數(shù)據(jù):\n%s\n", buffer); return 0; }
上述代碼使用了libcurl庫(kù),其中write_data()是一個(gè)回調(diào)函數(shù),用于將返回的數(shù)據(jù)保存到buffer中。然后使用curl_easy_setopt()函數(shù)來(lái)設(shè)置HTTP請(qǐng)求參數(shù),并執(zhí)行curl_easy_perform()函數(shù)來(lái)執(zhí)行GET請(qǐng)求。最后將返回的JSON數(shù)據(jù)打印到控制臺(tái)上。
這里的JSON數(shù)據(jù)格式如下:
{ "name": "John", "age": 30, "city": "New York" }
使用上述代碼可以輕松獲取JSON數(shù)據(jù)并進(jìn)行處理。C語(yǔ)言處理HTTP請(qǐng)求和JSON數(shù)據(jù)還有其他方法,但使用libcurl庫(kù)是一種快捷而有效的方法。