在C語(yǔ)言中,我們可以使用第三方庫(kù)或手動(dòng)編寫(xiě)代碼來(lái)提交JSON數(shù)據(jù)。下面我們將介紹兩種不同的方法。
方法一:使用第三方庫(kù)
#include#include #include int main(void) { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { struct json_object *json_obj; json_obj = json_object_new_object(); json_object_object_add(json_obj, "name", json_object_new_string("John")); json_object_object_add(json_obj, "age", json_object_new_int(30)); curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/api"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_object_to_json_string(json_obj)); 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_global_cleanup(); return 0; }
以上代碼使用了Curl和Json-c兩個(gè)第三方庫(kù),Json-c用于創(chuàng)建JSON對(duì)象。我們首先創(chuàng)建一個(gè)JSON對(duì)象,并添加兩個(gè)屬性name和age,然后使用curl_easy_setopt函數(shù)設(shè)置URL和POST數(shù)據(jù),最后使用curl_easy_perform函數(shù)提交數(shù)據(jù)。
方法二:手動(dòng)編寫(xiě)代碼
#include#include #include #include int main(void) { struct sockaddr_in server_addr; char *json = "{\"name\":\"John\",\"age\":30}\r\n"; char *request; int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { perror("socket"); return -1; } memset(&server_addr, 0, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(80); inet_pton(AF_INET, "example.com", &server_addr.sin_addr); if (connect(sockfd, (const struct sockaddr *)&server_addr, sizeof(struct sockaddr_in)) == -1) { perror("connect"); return -1; } asprintf(&request, "POST /api HTTP/1.1\r\n" "Host: example.com\r\n" "Content-Type: application/json\r\n" "Content-Length: %ld\r\n" "\r\n" "%s", strlen(json), json); if (send(sockfd, request, strlen(request), 0) == -1) { perror("send"); return -1; } free(request); close(sockfd); return 0; }
以上代碼使用了socket API來(lái)手動(dòng)編寫(xiě)HTTP請(qǐng)求。我們首先創(chuàng)建一個(gè)套接字,并通過(guò)connect函數(shù)連接到服務(wù)器。然后構(gòu)建HTTP POST請(qǐng)求,設(shè)置Content-Type為application/json,設(shè)置Content-Length為JSON數(shù)據(jù)長(zhǎng)度,發(fā)送請(qǐng)求到服務(wù)器。
下一篇vue中依賴注入