#!/usr/bin/env python3 import sys from datetime import datetime from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 8099 class Sink(BaseHTTPRequestHandler): def _log(self, method: str) -> None: ts = datetime.now().strftime("%H:%M:%S") src = self.client_address[0] clen = int(self.headers.get("Content-Length", 0) or 0) body = self.rfile.read(clen) if clen else b"" ctype = self.headers.get("Content-Type", "-") print(f"\n=== {ts} {method} {self.path} from {src} ===", flush=True) print(f" Content-Type: {ctype} ({clen} bytes)", flush=True) text = body.decode("utf-8", "replace") cut = text.find('Content-Type: image/jpeg') if cut != -1: text = text[:cut] + "\n [...JPEG image part omitted...]" print(" body:\n" + text, flush=True) self.send_response(200) self.send_header("Content-Length", "2") self.end_headers() self.wfile.write(b"OK") def do_POST(self): self._log("POST") def do_GET(self): self._log("GET") def do_PUT(self): self._log("PUT") def log_message(self, *args): pass if __name__ == "__main__": print(f"camera-event post test listening on 0.0.0.0:{PORT}", flush=True) print("Ctrl-C to stop.\n", flush=True) ThreadingHTTPServer(("0.0.0.0", PORT), Sink).serve_forever()