淘先锋技术网

首页 1 2 3 4 5 6 7

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