C語言是一種強大的編程語言,可以進行各種各樣的任務,包括網絡通訊。JSON是一種常用的數據交換格式,它易于閱讀和編寫,并且在網絡通訊中使用廣泛。以下是在C語言中使用JSON POST進行網絡通訊的示例代碼。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> #include <jansson.h> void post_json(const char *url, const char *json) { CURL *curl; CURLcode res; struct curl_slist *headers = NULL; char *data = NULL; long http_code = 0; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if (curl) { headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, strlen(json)); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); goto exit; } curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); printf("HTTP code: %ld\n", http_code); exit: curl_slist_free_all(headers); curl_easy_cleanup(curl); } curl_global_cleanup(); } int main() { const char *url = "http://example.com/api"; json_t *obj = json_object(); json_t *val = json_string("value"); json_object_set(obj, "key", val); char *json = json_dumps(obj, JSON_INDENT(2)); printf("Request:\n%s\n", json); post_json(url, json); free(json); json_decref(val); json_decref(obj); return 0; }
在上面的代碼中,post_json()函數定義了使用CURL發送JSON POST請求的邏輯。它采用libcurl庫作為HTTP客戶端,并傳遞URL和JSON數據作為參數。函數將Content-Type標頭設置為application/json,并將JSON數據設置為請求正文。然后它執行HTTP請求,并檢查HTTP響應代碼。
在主程序中,我們首先創建一個JSON對象,將其編碼為字符串,并將其打印為請求正文。然后,我們調用post_json()函數并傳遞URL和JSON數據。最后,我們釋放所有分配的內存。
在上述例子中,我們使用了jansson庫來編碼和解碼JSON數據。除此之外,還有許多其他的JSON庫可供選擇,如rapidjson和cJSON等。