add tool for listening http request

This commit is contained in:
leimingsheng 2025-05-13 14:37:01 +08:00
parent 738b137f06
commit 52682fb22c
3 changed files with 64 additions and 0 deletions

@ -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]} <port>")
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}")

@ -0,0 +1,6 @@
# 使用方法
``````shell
python listen_port_for_http.py <port>
``````

@ -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请求