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数据。当我们在做一些底层操作的时候,这种方法可能会比较常见。如果在开发过程中遇到问题,可以查看错误提示来解决问题。