在C語言中,發送JSON數據到服務器有很多種方案,本文介紹其中一種常用的方法。
首先,需要用到HTTP客戶端庫libcurl。在使用前,需要安裝該庫,并將其頭文件和動態鏈接庫文件添加到工程中。
下面是發送JSON數據的示例代碼:
CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { // 設置URL curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/jsonhandler"); // 設置POST請求 curl_easy_setopt(curl, CURLOPT_POST, 1L); // 設置JSON數據 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"); // 設置請求頭 struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // 執行請求 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); }
上面的代碼中,首先使用curl_easy_init()函數初始化一個CURL對象。接下來,使用curl_easy_setopt()函數設置URL、請求方式為POST、JSON數據和請求頭。最后,使用curl_easy_perform()函數執行請求,如果請求失敗,使用curl_easy_strerror()函數輸出錯誤信息。
注意,上面的代碼中的JSON數據是直接寫死的字符串。在實際開發中,需要根據業務邏輯動態生成JSON數據。
完整的代碼可參考以下示例:
#include#include int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/jsonhandler"); curl_easy_setopt(curl, CURLOPT_POST, 1L); // 動態生成JSON數據 char *json_str = "{\"name\":\"John\",\"age\":%d,\"city\":\"%s\"}"; int age = 30; char city[20] = "New York"; int json_str_len = snprintf(NULL, 0, json_str, age, city); char *json_data = (char *)malloc(json_str_len + 1); snprintf(json_data, json_str_len + 1, json_str, age, city); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_data); struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_slist_free_all(headers); curl_easy_cleanup(curl); } return 0; }
上面的代碼中,首先使用snprintf()函數動態生成JSON數據。注意,需要通過snprintf()函數計算JSON字符串的長度,并使用malloc()函數動態分配內存。接下來,使用指針json_data指向分配的內存空間,并通過snprintf()函數將動態生成的JSON數據寫入json_data中。最后,執行請求并釋放資源。