c 语言 http请求
时间: 2024-01-23 14:13:42 浏览: 70
C语言可以通过socket库实现HTTP请求。具体步骤如下:
1. 通过域名获取IP地址。
2. 创建socket并连接服务器。
3. 合成并发送HTTP请求报文,接收响应。
4. 解析响应报文,得到内容并做出相应的处理。
以下是一个简单的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);
}
// 通过域名获取IP地址
if ((he = gethostbyname(argv[1])) == NULL) {
printf("gethostbyname error\n");
exit(1);
}
// 创建socket并连接服务器
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("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("connect error\n");
exit(1);
}
// 合成并发送HTTP请求报文
char request[MAXLINE];
sprintf(request, "GET / HTTP/1.1\r\nHost: %s\r\n\r\n", argv[1]);
write(sockfd, request, strlen(request));
// 接收响应
while ((n = read(sockfd, recvline, MAXLINE)) > 0) {
recvline[n] = '\0';
printf("%s", recvline);
}
// 解析响应报文,得到内容并做出相应的处理
exit(0);
}
```
阅读全文