c语言实现http通讯
时间: 2023-09-25 16:10:06 浏览: 39
在 C 语言中,可以使用 sockets API 来实现 HTTP 通讯。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define BUFSIZE 1024
int main(int argc, char *argv[]) {
int sockfd;
char *host = "www.example.com";
char *path = "/";
char *port = "80";
struct sockaddr_in serveraddr;
char request[BUFSIZE];
char response[BUFSIZE];
int n;
// 创建 socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket");
exit(1);
}
// 设置服务器地址
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(atoi(port));
if (inet_pton(AF_INET, host, &serveraddr.sin_addr) <= 0) {
perror("inet_pton");
exit(1);
}
// 连接服务器
if (connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0) {
perror("connect");
exit(1);
}
// 构造 HTTP 请求
sprintf(request, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n", path, host);
// 发送请求
if (send(sockfd, request, strlen(request), 0) < 0) {
perror("send");
exit(1);
}
// 接收响应
memset(response, 0, BUFSIZE);
while ((n = recv(sockfd, response, BUFSIZE - 1, 0)) > 0) {
printf("%s", response);
memset(response, 0, BUFSIZE);
}
if (n < 0) {
perror("recv");
exit(1);
}
// 关闭 socket
close(sockfd);
return 0;
}
```
在以上代码中,我们首先创建了一个 socket,并设置了服务器的地址和端口号。然后构造了一个 HTTP GET 请求,并发送给服务器。接着,我们通过循环不断地接收服务器返回的响应,直到没有数据可读为止。最后,我们关闭了 socket。
需要注意的是,以上代码只是一个简单的示例,还有很多细节需要处理,例如错误处理、请求头的构造等。