From 52682fb22c497d8d1a4a619210bdb9041e305942 Mon Sep 17 00:00:00 2001 From: leimingsheng Date: Tue, 13 May 2025 14:37:01 +0800 Subject: [PATCH] add tool for listening http request --- .../listen_port_for_http.py | 57 +++++++++++++++++++ 002.Listen_port_for_http/readme.md | 6 ++ readme.md | 1 + 3 files changed, 64 insertions(+) create mode 100644 002.Listen_port_for_http/listen_port_for_http.py create mode 100644 002.Listen_port_for_http/readme.md diff --git a/002.Listen_port_for_http/listen_port_for_http.py b/002.Listen_port_for_http/listen_port_for_http.py new file mode 100644 index 0000000..7c0c649 --- /dev/null +++ b/002.Listen_port_for_http/listen_port_for_http.py @@ -0,0 +1,57 @@ +import socket +import threading + +def handle_client(client_socket): + try: + # 设置超时以避免长时间阻塞 + client_socket.settimeout(5) + request_data = b'' + while True: + chunk = client_socket.recv(4096) + if not chunk: + break + request_data += chunk + # 检查是否已经接收完头部(以两个换行符结尾) + if b'\r\n\r\n' in request_data: + break + # 解码并打印请求数据 + decoded_data = request_data.decode('utf-8', errors='replace') + print("=" * 50) + print(f"Received HTTP Request:\n{decoded_data}") + print("=" * 50) + except Exception as e: + print(f"Error handling request: {e}") + finally: + client_socket.close() + +def start_server(port): + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + # 允许地址重用,避免重启时端口占用 + server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + server.bind(('0.0.0.0', port)) + server.listen(5) + print(f"[*] Listening on 0.0.0.0:{port}") + + try: + while True: + client, addr = server.accept() + print(f"[*] Accepted connection from {addr[0]}:{addr[1]}") + handler = threading.Thread(target=handle_client, args=(client,)) + handler.start() + except KeyboardInterrupt: + print("\n[*] Server shutting down.") + server.close() + +if __name__ == "__main__": + import sys + if len(sys.argv) != 2: + print(f"Usage: {sys.argv[0]} ") + sys.exit(1) + + try: + port = int(sys.argv[1]) + start_server(port) + except ValueError: + print("Error: Port must be a number.") + except Exception as e: + print(f"Error: {e}") \ No newline at end of file diff --git a/002.Listen_port_for_http/readme.md b/002.Listen_port_for_http/readme.md new file mode 100644 index 0000000..618fddb --- /dev/null +++ b/002.Listen_port_for_http/readme.md @@ -0,0 +1,6 @@ +# 使用方法 + +``````shell +python listen_port_for_http.py +`````` + diff --git a/readme.md b/readme.md index d7d8a55..baa2a35 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,5 @@ # 工具列表 - [001.add prefix 0 for directory](./001.add_prefix_0_for_directory):用于遍历当前文件夹并为每个文件夹加一个前缀0 +- [002.listen port for http](./002.Listen_port_for_http): 用于监听特定端口的http请求