在C語(yǔ)言中,通過(guò)使用POST方法向服務(wù)器傳遞多個(gè)參數(shù),可以使用JSON數(shù)據(jù)類(lèi)型。JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,它的優(yōu)點(diǎn)在于可以快速方便地在不同平臺(tái)之間傳輸數(shù)據(jù)。
以下是一個(gè)使用POST方法發(fā)送JSON數(shù)據(jù)的示例代碼:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> #include <jansson.h> int main(void) { CURL* curl; CURLcode res; char* url = "http://example.com/api/test"; char* json_data; json_t* root; json_error_t error; long http_code = 0; // 創(chuàng)建JSON對(duì)象 root = json_pack("{s:s,s:i,s:s,s:s}", "name", "Alice", "age", 24, "email", "alice@example.com", "phone", "1234567890"); // 將JSON對(duì)象轉(zhuǎn)換為字符串 json_data = json_dumps(root, 0); // 初始化CURL curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if (curl) { // 設(shè)置HTTP請(qǐng)求頭 struct curl_slist* headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); // 設(shè)置POST請(qǐng)求參數(shù) curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_POST, 1); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_data); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(json_data)); // 發(fā)送POST請(qǐng)求 res = curl_easy_perform(curl); curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); if (res == CURLE_OK) { printf("HTTP Status Code: %ld\n", http_code); } else { printf("Error: %s\n", curl_easy_strerror(res)); } } // 釋放資源 curl_easy_cleanup(curl); curl_global_cleanup(); free(json_data); json_decref(root); return 0; }
在上面的代碼中,首先創(chuàng)建了一個(gè)JSON對(duì)象,包含了四個(gè)屬性名分別是“name”、“age”、“email”和“phone”,對(duì)應(yīng)的屬性值分別是“Alice”、“24”、“alice@example.com”和“1234567890”。接下來(lái)使用json_dumps函數(shù)將JSON對(duì)象轉(zhuǎn)換為字符串。然后通過(guò)libcurl庫(kù)發(fā)送POST請(qǐng)求,指定了請(qǐng)求的URL地址、請(qǐng)求頭的“Content-Type”為“application/json”、請(qǐng)求體為JSON數(shù)據(jù)字符串。最后通過(guò)curl_easy_perform函數(shù)發(fā)送POST請(qǐng)求,并通過(guò)curl_easy_getinfo函數(shù)獲取了HTTP響應(yīng)的狀態(tài)碼,如果狀態(tài)碼是200,則說(shuō)明請(qǐng)求成功。