c语言写监听get请求URL
时间: 2024-09-20 16:11:54 浏览: 41
在C语言中,通常不直接支持HTTP请求的发送和接收,因为这涉及到网络编程,而C语言的标准库并不包含这样的功能。但是,你可以利用一些第三方库,如libcurl,它提供了一套强大的函数来处理HTTP请求。
如果你想在C语言中监听GET请求并获取URL,你需要创建一个服务器,这通常涉及使用socket编程。这里是一个简单的示例,使用`sys/socket.h`和`netinet/in.h`头文件,以及`listen()`、`accept()`等系统调用:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define MAX_CONNECTIONS 5
#define BUFFER_SIZE 1024
void handle_client(int client_sock) {
char request[BUFFER_SIZE];
memset(request, 0, sizeof(request));
// 接收数据
int bytes_received = recv(client_sock, request, BUFFER_SIZE - 1, 0);
if (bytes_received <= 0) {
printf("Error receiving data from client\n");
return;
}
request[bytes_received] = '\0'; // 添加空字符终止字符串
printf("Received GET request for URL: %s\n", request);
// 关闭连接
send(client_sock, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHello, GET request!", strlen("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHello, GET request!"), 0);
close(client_sock);
}
int main() {
int server_sock, client_sock;
struct sockaddr_in server_addr, client_addr;
socklen_t addr_len = sizeof(client_addr);
// 创建套接字
server_sock = socket(AF_INET, SOCK_STREAM, 0);
if (server_sock == -1) {
perror("Error creating socket");
exit(1);
}
// 绑定地址
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SOME_PORT); // 设置端口
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(server_sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
listen(server_sock, MAX_CONNECTIONS);
while (1) {
// 等待客户端连接
client_sock = accept(server_sock, (struct sockaddr*)&client_addr, &addr_len);
if (client_sock == -1) {
perror("Error accepting connection");
continue;
}
// 开始处理客户端请求
handle_client(client_sock);
}
close(server_sock);
return 0;
}
```
请注意,这个示例只是一个基本的服务器框架,并未完全处理实际的HTTP请求解析。在生产环境中,你可能需要使用更专业的HTTP服务器库,如nginx或lighttpd。
阅读全文