Created
February 23, 2024 06:20
-
-
Save DarcJC/2844e6c3c3cfdb16d2d9eab810aa38d4 to your computer and use it in GitHub Desktop.
A bottle to catch any http request sent to it
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from http.server import BaseHTTPRequestHandler, HTTPServer | |
import socket | |
class RequestHandler(BaseHTTPRequestHandler): | |
def do_GET(self): | |
self.return_request() | |
def do_POST(self): | |
self.return_request() | |
def do_PUT(self): | |
self.return_request() | |
def do_DELETE(self): | |
self.return_request() | |
def return_request(self): | |
# 获取客户端地址 | |
client_ip, _ = self.client_address | |
# 获取请求行 | |
request_line = f"{self.command} {self.path} {self.request_version}\r\n" | |
# 获取请求头 | |
headers = ''.join(f"{k}: {v}\r\n" for k, v in self.headers.items()) | |
# 获取请求体 | |
content_length = self.headers.get('Content-Length') | |
if content_length: | |
body = self.rfile.read(int(content_length)).decode('utf-8') | |
else: | |
body = '' | |
# 组装完整的请求报文 | |
request_message = f"{request_line}{headers}\r\n{body}" | |
# 返回原始请求报文 | |
self.send_response(200) | |
self.send_header('Content-Type', 'text/plain; charset=utf-8') | |
self.end_headers() | |
self.wfile.write(request_message.encode('utf-8')) | |
print(request_message) | |
def run(server_class=HTTPServer, handler_class=RequestHandler, port=8080): | |
server_address = ('', port) | |
httpd = server_class(server_address, handler_class) | |
print(f"Starting httpd on port {port}...") | |
httpd.serve_forever() | |
if __name__ == "__main__": | |
from sys import argv | |
if len(argv) == 2: | |
run(port=int(argv[1])) | |
else: | |
run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
GPT4写的