Linux C 实现 HTTP 服务器并获取请求 URL
要在 Linux 下使用 C 语言实现一个 HTTP 服务器并获取请求的 URL,你可以使用以下步骤:
- 创建一个 TCP 套接字并绑定到服务器的 IP 地址和端口号。
- 监听套接字以接受传入的连接请求。
- 接受连接请求并创建一个新的套接字来处理客户端请求。
- 从套接字中读取 HTTP 请求。
- 从 HTTP 请求中解析出请求的 URL。
- 使用 URL 进行相应的处理和响应。
- 关闭套接字并返回到第 3 步以处理下一个连接请求。
以下是一个简单的示例代码,演示了如何实现上述步骤:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8080
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[1024] = {0};
// 创建套接字
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// 绑定套接字
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听
if (listen(server_fd, 3) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
while (1) {
// 接受连接请求
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
// 读取 HTTP 请求
read(new_socket, buffer, 1024);
printf("Request:
%s
", buffer);
// 解析请求的 URL
char *url = strtok(buffer, " ");
url = strtok(NULL, " ");
printf("URL: %s
", url);
// 响应请求
char *response = "HTTP/1.1 200 OK\nContent-Type: text/plain\nContent-Length: 12\n\nHello World!";
write(new_socket, response, strlen(response));
close(new_socket);
}
return 0;
}
这段代码创建了一个 TCP 套接字并绑定到本地 IP 地址的 8080 端口。它监听传入的连接请求,并在接受请求后从套接字缓冲区中读取 HTTP 请求。然后,它使用 strtok 函数从 HTTP 请求中解析出 URL,并将其打印出来。最后,它发送一个简单的响应给客户端。
请注意,这只是一个简单的示例,实际的 HTTP 服务器通常需要更复杂的逻辑来处理不同的请求方法(如 GET、POST、PUT 等)和处理静态文件、动态内容等。此外,还需要处理连接的并发性和错误情况。
原文地址: https://www.cveoy.top/t/topic/qhsR 著作权归作者所有。请勿转载和采集!