当先锋百科网

首页 1 2 3 4 5 6 7

在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;
}