C語言是一種廣泛應用于系統編程、嵌入式開發和網絡編程的高級語言,擁有強大的功能和靈活的語法。在實際開發中,常常需要使用C語言接收HTTP POST請求中的JSON數據。下面我們就來講解一下如何使用C語言接收HTTP POST JSON。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main() { // 創建socket int fd = socket(AF_INET, SOCK_STREAM, 0); if (fd == -1) { perror("socket error"); exit(-1); } // 綁定IP地址和端口號 struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(80); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) { perror("bind error"); exit(-1); } // 開始監聽 if (listen(fd, 20) == -1) { perror("listen error"); exit(-1); } // 等待客戶端連接并接收請求數據 while (1) { struct sockaddr_in client_addr; socklen_t addr_len = sizeof(client_addr); int client_fd = accept(fd, (struct sockaddr*)&client_addr, &addr_len); if (client_fd == -1) { perror("accept error"); continue; } char buf[1024] = {0}; int len = 0; while ((len = recv(client_fd, buf, sizeof(buf), 0)) >0) { printf("%s\n", buf); } // 解析JSON數據 char post_data[1024] = {0}; sscanf(buf, "POST / HTTP/1.1\nContent-Length: %*d\n\n%s", post_data); printf("JSON data: %s\n", post_data); close(client_fd); } close(fd); return 0; }
上述代碼是一個簡單的HTTP服務器程序。其中使用了socket、bind、listen、accept等函數創建了一個套接字并開始監聽客戶端連接。在接收到客戶端的請求數據后,通過sscanf函數從請求報文中提取出POST請求中的JSON數據,最后打印出來。
當然,在實際應用中,我們通常會使用更加穩定和可靠的開源框架庫來實現JSON的解析和處理。