在使用 C 語言開發接收 POST 請求時,我們有時需要接收 JSON 格式的數據。JSON 是輕量級的數據交換格式,它可以表示數組、對象、字符串、數字等數據類型。下面我們來看一下如何使用 C 語言接收 POST 過來的 JSON 數據。
首先,我們需要使用 libcurl 庫來發送 POST 請求并接收服務器返回的數據。在發送 POST 請求時,我們需要將請求頭設置為 "Content-Type: application/json",表示發送的數據是 JSON 格式的。下面是一個發送 POST 請求的示例代碼:
#include#include int main(void) { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/api"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"John\",\"age\":30}"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, "Content-Type: application/json"); 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; }
在接收 POST 請求時,我們也需要設置請求頭為 "Content-Type: application/json",然后讀取請求體中的 JSON 數據。下面是一個接收 POST 請求的示例代碼:
#include#include #include #include #define BUFSIZE 1024 int main(void) { char buf[BUFSIZE]; char *payload; size_t length; ssize_t bytes_read; /* Read request headers */ while ((bytes_read = read(STDIN_FILENO, buf, BUFSIZE)) >0) { buf[bytes_read] = '\0'; if (strcmp(buf, "\r\n") == 0) break; } /* Read request payload */ length = atoi(getenv("CONTENT_LENGTH")); payload = malloc(length + 1); if (payload == NULL) { fprintf(stderr, "Out of memory\n"); return 1; } bytes_read = read(STDIN_FILENO, payload, length); if (bytes_read != length) { fprintf(stderr, "Error reading request payload\n"); return 1; } payload[length] = '\0'; printf("Content-Type: text/plain\n\n"); printf("Received payload: %s\n", payload); free(payload); return 0; }
以上是一個簡單的接收 POST 請求并輸出請求體中 JSON 數據的代碼示例。接下來,我們可以根據需要對 JSON 數據進行解析和處理,例如將其存儲到數據庫中或進行數據分析等操作。
下一篇vue中導入jq