C語言作為一門可以進行底層操作的編程語言,有時候需要與服務器進行數據交互來完成一些任務。其中,發送JSON數據是很常見的一種情況,接下來我們就來了解一下C語言如何使用GET請求發送JSON數據。
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/socket.h> #include<arpa/inet.h> #define MAX_SIZE 2048 int main() { // 創建socket套接字 int client_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (client_fd == -1) { perror("socket創建失敗"); exit(1); } // 設置socket地址 struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(80); server_addr.sin_addr.s_addr = inet_addr("服務器IP地址"); // 連接服務器 int conn = connect(client_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)); if (conn == -1) { perror("連接失敗"); close(client_fd); exit(1); } // 設置HTTP GET請求的Header和Body char header[MAX_SIZE], body[MAX_SIZE]; char *path = "/api/user_info"; sprintf(header, "GET %s HTTP/1.1\r\nHost: 服務器IP地址\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\r\nAccept: */*\r\nContent-Type: application/json\r\nConnection: close\r\n\r\n", path); sprintf(body, "{\"username\":\"username\",\"password\":\"password\"}"); // 發送請求頭和請求體 int len = strlen(header) + strlen(body); char buf[MAX_SIZE]; strcpy(buf, header); strcat(buf, body); int send_len = send(client_fd, buf, len, 0); if (send_len == -1) { perror("發送失敗"); close(client_fd); exit(1); } // 接收服務器響應 char recv_buf[MAX_SIZE]; int recv_len = recv(client_fd, recv_buf, MAX_SIZE, 0); if (recv_len == -1) { perror("接收失敗"); close(client_fd); exit(1); } // 輸出響應 printf("%s", recv_buf); // 關閉socket套接字 close(client_fd); return 0; }
上面這段代碼就可以實現C語言通過GET請求向服務器發送JSON數據的操作。由于GET請求沒有請求體,所以我們需要把JSON數據以字符串形式放入請求頭的后面。在這里,我們把請求路徑設置為了/api/user_info,Content-Type設置為了application/json。
接下來,我們通過socket套接字與服務器建立連接,將請求頭和請求體發送給服務器,并接收服務器響應。最后,我們將響應輸出即可。
總之,通過這篇文章,我們了解了C語言如何通過GET請求發送JSON數據。當我們在做一些底層操作的時候,這種方法可能會比較常見。如果在開發過程中遇到問題,可以查看錯誤提示來解決問題。