用c++写一个http客户端
时间: 2023-05-21 18:01:24 浏览: 64
好的,以下是一个简单的用 C 语言编写的 HTTP 客户端示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#define MAXLINE 4096
int main(int argc, char **argv) {
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
struct hostent *he;
if (argc != 2) {
printf("usage: %s <url>\n", argv[0]);
exit(1);
}
char *url = argv[1];
char *host = strstr(url, "//");
if (host == NULL) {
host = url;
} else {
host += 2;
}
char *path = strchr(host, '/');
if (path == NULL) {
path = "/";
} else {
*path = '\0';
path++;
}
he = gethostbyname(host);
if (he == NULL) {
printf("error: gethostbyname failed\n");
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
printf("error: socket error\n");
exit(1);
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(80);
servaddr.sin_addr = *((struct in_addr *)he->h_addr);
if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
printf("error: connect error\n");
exit(1);
}
char request[MAXLINE];
sprintf(request, "GET /%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n", path, host);
write(sockfd, request, strlen(request));
while ((n = read(sockfd, recvline, MAXLINE)) > 0) {
recvline[n] = '\0';
printf("%s", recvline);
}
close(sockfd);
exit(0);
}
```
这个程序可以通过命令行参数传入一个 URL,然后使用 HTTP 协议向该 URL 发送 GET 请求,并将响应内容输出到标准输出。例如,可以使用以下命令运行该程序:
```
./http_client http://www.baidu.com/
```
这将向百度的首页发送 GET 请求,并将响应内容输出到终端。