C语言实现HTTP请求
在C语言中,要实现对HTTP服务器的请求,通常需要使用套接字编程,以下是一个简单的示例,展示了如何使用C语言向HTTP服务器发送GET请求并接收响应。
1. 创建套接字
需要创建一个套接字来与服务器建立连接,可以使用socket()
函数来创建套接字。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> int main() { int sock; struct sockaddr_in server_addr; // 创建套接字 sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { perror("socket"); exit(EXIT_FAILURE); } // 设置服务器地址和端口 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(80); // HTTP默认端口80 inet_pton(AF_INET, "www.example.com", &server_addr.sin_addr); // 连接到服务器 if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("connect"); close(sock); exit(EXIT_FAILURE); } // 后续代码... }
2. 构建HTTP请求
需要构建一个HTTP GET请求,HTTP请求由请求行、请求头和可选的请求体组成,对于简单的GET请求,只需要请求行和一些必要的请求头。
char request[] = "GET / HTTP/1.1 Host: www.example.com Connection: close ";
3. 发送请求
使用send()
函数将构建好的HTTP请求发送到服务器。
if (send(sock, request, strlen(request), 0) == -1) { perror("send"); close(sock); exit(EXIT_FAILURE); }
4. 接收响应
服务器收到请求后会返回响应,使用recv()
函数接收响应数据,可以循环接收数据,直到服务器关闭连接(即recv()
返回0)。
char buffer[4096]; int bytes_received; while ((bytes_received = recv(sock, buffer, sizeof(buffer) 1, 0)) > 0) { buffer[bytes_received] = '