現(xiàn)在在Web開發(fā)中,經(jīng)常需要使用HTTP請(qǐng)求和響應(yīng)json格式的數(shù)據(jù)。那么,我們?cè)撊绾问褂肅語(yǔ)言來(lái)完成這個(gè)操作呢?
在C語(yǔ)言中,需要使用curl庫(kù)來(lái)發(fā)送HTTP請(qǐng)求和接收響應(yīng)。接著需要把json格式的數(shù)據(jù)進(jìn)行數(shù)據(jù)結(jié)構(gòu)化處理,這里可以使用cJSON庫(kù)實(shí)現(xiàn)。下面是一段示例代碼:
#include#include #include #include "cJSON.h" int main() { CURL *curl; CURLcode res; char *url = "http://example.com/api"; cJSON *root, *data, *value; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if (curl) { root = cJSON_CreateObject(); data = cJSON_CreateObject(); cJSON_AddStringToObject(root, "req_type", "post"); //請(qǐng)求類型為post cJSON_AddStringToObject(root, "token", "123456"); //添加token /*添加要post的數(shù)據(jù)*/ cJSON_AddNumberToObject(data, "id", 123); cJSON_AddStringToObject(data, "name", "cocosongying"); cJSON_AddStringToObject(data, "address", "China"); cJSON_AddItemToObject(root, "data", data); /*將數(shù)據(jù)格式化,并發(fā)送*/ char *post_data = cJSON_Print(root); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) strlen(post_data)); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post_data); /*接收服務(wù)器響應(yīng)*/ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); res = curl_easy_perform(curl); /*處理響應(yīng)*/ if (res == CURLE_OK) { cJSON *json_response = cJSON_Parse(response.memory); value = cJSON_GetObjectItem(json_response, "message"); if (value != NULL) { printf("Message from server: %s\n", value->valuestring); } } cJSON_Delete(root); curl_easy_cleanup(curl); free(post_data); } curl_global_cleanup(); return 0; }
上述代碼塊中,首先使用cJSON庫(kù)創(chuàng)建了一個(gè)json對(duì)象,然后添加了請(qǐng)求類型和token信息,最后添加要發(fā)送的數(shù)據(jù)。接著將數(shù)據(jù)格式化,并通過(guò)curl_easy_setopt()設(shè)置請(qǐng)求和響應(yīng)的相關(guān)參數(shù)。最后使用cJSON庫(kù)解析服務(wù)器響應(yīng),并處理相應(yīng)信息。