如何在 Python FastAPI 中記錄原始 HTTP 請求/回應?
FastAPI 提供了多種方法來擷取和記錄原始 HTTP 請求和回應,滿足特定要求和效能考量。
選項 1:中間件
中間件可讓您攔截和處理請求和回應。您可以建立一個中間件來消耗流中的請求正文並將其儲存。對於回應正文,將其讀入位元組物件並傳回自訂回應。使用 BackgroundTask 非同步記錄數據,以避免影響回應時間。
範例:
async def some_middleware(request: Request, call_next): req_body = await request.body() response = await call_next(request) res_body = b'' async for chunk in response.body_iterator: res_body += chunk task = BackgroundTask(log_info, req_body, res_body) return Response(content=res_body, background=task)
選項2:自訂APIRoute 類別
建立自訂APIRoute 類別
建立自訂APIRoute 類別
class LoggingRoute(APIRoute): async def custom_route_handler(request: Request) -> Response: req_body = await request.body() response = await original_route_handler(request) res_body = b'' async for item in response.body_iterator: res_body += item task = BackgroundTask(log_info, req_body, res_body) response = Response(content=res_body, background=task) return response
以上是如何在 Python FastAPI 中記錄原始 HTTP 請求和回應?的詳細內容。更多資訊請關注PHP中文網其他相關文章!