Linux C 下http服务器处理POST请求代码
时间: 2024-03-16 11:42:05 浏览: 25
下面是一个简单的基于 Linux C 的 HTTP 服务器处理 POST 请求的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define PORT 8080
#define MAX_REQUEST_SIZE 8192
int main(int argc, char *argv[]) {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char request[MAX_REQUEST_SIZE] = {0};
// 创建 socket 文件描述符
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
// 设置 socket 选项
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
perror("setsockopt failed");
exit(EXIT_FAILURE);
}
// 绑定 socket 到指定的端口
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);
}
// 读取请求
int request_length = read(new_socket, request, MAX_REQUEST_SIZE);
if (request_length < 0) {
perror("read failed");
exit(EXIT_FAILURE);
}
// 处理 POST 请求
char *pos = strstr(request, "\r\n\r\n");
if (pos != NULL) {
char *post_data = pos + 4;
printf("POST data: %s\n", post_data);
// 在这里可以对 post_data 进行处理
}
// 发送响应
const char *response = "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n";
if (send(new_socket, response, strlen(response), 0) < 0) {
perror("send failed");
exit(EXIT_FAILURE);
}
// 关闭客户端连接
close(new_socket);
}
return 0;
}
```
该示例代码监听指定的端口并接受客户端连接,读取客户端发送的 HTTP 请求,处理 POST 请求中的数据,并发送响应给客户端。在处理 POST 请求时,可以使用 `strstr()` 函数查找请求中的数据部分,然后进行相应的处理。注意在发送响应后要关闭客户端连接。