From 7c67f7d1800d463f06e52ab6c359ff5bc77e53e6 Mon Sep 17 00:00:00 2001 From: Mathieu Broillet Date: Thu, 28 Aug 2025 15:49:26 +0200 Subject: [PATCH] added debug mode to write requests to disk --- const.py | 4 ++++ main_app.py | 1 + utils.py | 19 ++++++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/const.py b/const.py index a115787..e2a1368 100644 --- a/const.py +++ b/const.py @@ -1,10 +1,14 @@ import logging +import os import xml.etree.ElementTree as ET from datetime import datetime, timezone, timedelta from enum import Enum logger = logging.getLogger("uvicorn") +LOG_REQUESTS = os.getenv("WRITE_REQUESTS") == "1" +LOG_FILE = "requests.log" + class Hosts(str, Enum): PLEX = "plex.tv" diff --git a/main_app.py b/main_app.py index 83ac1ef..9081c75 100644 --- a/main_app.py +++ b/main_app.py @@ -1,3 +1,4 @@ +import os import xml.etree.ElementTree as ET from urllib.parse import parse_qs diff --git a/utils.py b/utils.py index 6a9fe73..721a93d 100644 --- a/utils.py +++ b/utils.py @@ -3,7 +3,7 @@ from fastapi import Request, Depends, HTTPException from fastapi.responses import Response from starlette.responses import JSONResponse -from const import Hosts, HOP_BY_HOP_HEADERS, logger +from const import Hosts, HOP_BY_HOP_HEADERS, logger, LOG_REQUESTS, LOG_FILE from http_client_static_dns import AsyncCustomHost, NameSolver # Configure upstream client @@ -60,6 +60,23 @@ async def call_official(request: Request, path: str) -> httpx.Response: } upstream_response.headers = resp_headers + if LOG_REQUESTS: + with open(LOG_FILE, "a", encoding="utf-8") as f: + f.write(f"{request.method} {request.url}\n") + f.write(f"Request headers: {req_headers}\n") + if body: + try: + f.write(f"Request body: {body.decode('utf-8')}\n") + except UnicodeDecodeError: + f.write(f"Request body: {body}\n") + f.write(f"Response status: {upstream_response.status_code}\n") + f.write(f"Response headers: {resp_headers}\n") + try: + f.write(f"Response body: {upstream_response.text}\n") + except UnicodeDecodeError: + f.write(f"Response body: {upstream_response.content}\n") + f.write("\n---\n\n") + return upstream_response