在C语言中模拟POST提交JSON数据类型可以使用libcurl库,该库是一个非常流行的网络传输库。需要注意的是,使用该库需要先安装libcurl库。
首先,我们需要引入curl.h头文件:
#include <curl/curl.h>
接下来,我们需要对JSON数据进行封装,将其转换为字符串形式。使用第三方库cJSON可以方便地完成这一步骤。该库可以将C语言数据类型转换为JSON格式。
cJSON *root = cJSON_CreateObject(); //创建JSON对象 cJSON_AddStringToObject(root, "name", "张三"); cJSON_AddNumberToObject(root, "age", 20); char *json = cJSON_PrintUnformatted(root); //转换为JSON字符串
然后,我们需要设置curl对象的属性。具体来说,需要设置请求的URL、请求方法、请求头信息和请求体信息等。
CURL *curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8080/api/user"); curl_easy_setopt(curl, CURLOPT_POST, 1L); struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json); }
最后,我们只需要执行curl操作并释放资源即可。
CURLcode 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);
完整的代码如下所示:
#include <curl/curl.h> #include <cJSON.h> int main() { cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "张三"); cJSON_AddNumberToObject(root, "age", 20); char *json = cJSON_PrintUnformatted(root); cJSON_Delete(root); CURL *curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8080/api/user"); curl_easy_setopt(curl, CURLOPT_POST, 1L); struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json); CURLcode 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_slist_free_all(headers); } free(json); return 0; }