add tool for listening http request
This commit is contained in:
parent
738b137f06
commit
52682fb22c
57
002.Listen_port_for_http/listen_port_for_http.py
Normal file
57
002.Listen_port_for_http/listen_port_for_http.py
Normal file
@ -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}")
|
||||||
6
002.Listen_port_for_http/readme.md
Normal file
6
002.Listen_port_for_http/readme.md
Normal file
@ -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
|
- [001.add prefix 0 for directory](./001.add_prefix_0_for_directory):用于遍历当前文件夹并为每个文件夹加一个前缀0
|
||||||
|
- [002.listen port for http](./002.Listen_port_for_http): 用于监听特定端口的http请求
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user