在C語言中,使用POST請求發送JSON格式的數據是常見的需求,下面我們來學習如何進行實現。
首先,我們需要使用curl庫進行POST請求的發送。在發送請求前,我們需要將JSON格式的數據轉換為字符串格式。下面是一個示例代碼:
#include#include #include #include #include #include // 回調函數,將響應寫入到buffer中 size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) { size_t realsize = size * nmemb; char *buffer = (char *)userdata; memcpy(buffer + strlen(buffer), ptr, realsize); return realsize; } // 發送POST請求 void post_json(const char *url, const char *json) { CURL *curl; CURLcode res; char buffer[1024] = ""; curl = curl_easy_init(); if (curl) { struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res)); } else { printf("Response: %s\n", buffer); } curl_slist_free_all(headers); curl_easy_cleanup(curl); } }
在上面的代碼中,我們使用了libcurl庫,來進行POST請求的發送。其中,需要注意的是:
- headers變量用來設置Content-Type為application/json,指明發送請求的數據為JSON格式
- json變量用來存放JSON格式的數據,需要在發送請求前將其轉換為字符串格式
下面是一個使用示例:
// 構造需要發送的JSON數據 struct json_object *reqobj = json_object_new_object(); json_object_object_add(reqobj, "name", json_object_new_string("John")); json_object_object_add(reqobj, "age", json_object_new_int(30)); const char *jsonStr = json_object_to_json_string(reqobj); // 發送POST請求 const char *url = "http://example.com/api"; post_json(url, jsonStr);
在上面的代碼中,我們使用了json-c庫來構造JSON格式的數據,然后將其轉換為字符串格式,并發送POST請求。
綜上所述,使用C語言發送POST請求,入參為JSON格式的數據,需要使用libcurl庫并設置Content-Type為application/json,同時需要將JSON格式的數據轉換為字符串格式。