from http.server import BaseHTTPRequestHandler, HTTPServer from urllib.parse import urlparse, parse_qs import json class DumpHandler(BaseHTTPRequestHandler): def _dump_request(self): print("\n" + "=" * 80) print("Client address:", self.client_address) print("Command:", self.command) print("Path:", self.path) print("Request version:", self.request_version) print("Request line:", self.requestline) parsed = urlparse(self.path) print("\nParsed URL:") print(" path:", parsed.path) print(" query:", parsed.query) print(" query params:", parse_qs(parsed.query)) print("\nHeaders:") for k, v in self.headers.items(): print(f" {k}: {v}") content_length = int(self.headers.get("Content-Length", 0)) body = self.rfile.read(content_length) if content_length > 0 else b"" print("\nBody bytes:") print(body) print("\nBody decoded (utf-8 if possible):") try: print(body.decode("utf-8")) except UnicodeDecodeError: print("") print("=" * 80 + "\n") return body def _send_done(self): resp = b"Done" self.send_response(200) self.send_header("Content-Type", "text/plain; charset=utf-8") self.send_header("Content-Length", str(len(resp))) self.end_headers() self.wfile.write(resp) def do_GET(self): self._dump_request() self._send_done() def do_POST(self): self._dump_request() self._send_done() def do_PUT(self): self._dump_request() self._send_done() def do_DELETE(self): self._dump_request() self._send_done() def do_PATCH(self): self._dump_request() self._send_done() def do_OPTIONS(self): self._dump_request() self._send_done() def do_HEAD(self): self._dump_request() self.send_response(200) self.end_headers() def log_message(self, format, *args): # 关闭默认日志,避免和我们自己的输出混在一起 pass if __name__ == "__main__": host = "0.0.0.0" port = 8443 server = HTTPServer((host, port), DumpHandler) print(f"Listening on http://{host}:{port}") server.serve_forever()