added debug mode to write requests to disk

This commit is contained in:
Mathieu Broillet 2025-08-28 15:49:26 +02:00
parent 240094d741
commit 7c67f7d180
Signed by: mathieub
GPG Key ID: 4428608CDA3A98D3
3 changed files with 23 additions and 1 deletions

View File

@ -1,10 +1,14 @@
import logging import logging
import os
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from datetime import datetime, timezone, timedelta from datetime import datetime, timezone, timedelta
from enum import Enum from enum import Enum
logger = logging.getLogger("uvicorn") logger = logging.getLogger("uvicorn")
LOG_REQUESTS = os.getenv("WRITE_REQUESTS") == "1"
LOG_FILE = "requests.log"
class Hosts(str, Enum): class Hosts(str, Enum):
PLEX = "plex.tv" PLEX = "plex.tv"

View File

@ -1,3 +1,4 @@
import os
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from urllib.parse import parse_qs from urllib.parse import parse_qs

View File

@ -3,7 +3,7 @@ from fastapi import Request, Depends, HTTPException
from fastapi.responses import Response from fastapi.responses import Response
from starlette.responses import JSONResponse 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 from http_client_static_dns import AsyncCustomHost, NameSolver
# Configure upstream client # Configure upstream client
@ -60,6 +60,23 @@ async def call_official(request: Request, path: str) -> httpx.Response:
} }
upstream_response.headers = resp_headers 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 return upstream_response