首頁 >後端開發 >Python教學 >如何在 Python FastAPI 中記錄原始 HTTP 請求和回應正文?

如何在 Python FastAPI 中記錄原始 HTTP 請求和回應正文?

Susan Sarandon
Susan Sarandon原創
2024-11-29 14:00:12659瀏覽

How Can I Log Raw HTTP Request and Response Bodies in Python FastAPI?

在Python FastAPI 中記錄原始HTTP 請求/回應主體

在Python FastAPI 中,您可以記錄特定請求/回應的原始JSON主體透過使用中間件或自訂APIRoute 類別來路由。

選項 1:使用中間件

中間件可讓您在端點處理請求和回應之前對其進行處理。建立中間件:

@app.middleware("http")
async def middleware(request: Request, call_next):
    # ...
    return await call_next(request)

使用 request.body() 或 request.stream() 方法來使用請求正文。將正文儲存在後台任務中以便稍後記錄。

對於回應正文,請使用自訂程式碼讀取並儲存它:

res_body = b''
async for chunk in response.body_iterator:
    res_body += chunk

然後您可以在其中記錄請求和回應正文BackgroundTask 以避免影響回應時間。

選項2:使用自訂APIRoute類別

建立自訂APIRoute 類別來處理要求和回應正文:

class LoggingRoute(APIRoute):
    # ...
    async def custom_route_handler(request: Request) -> Response:
        # ...
        return response

在自訂在路由處理程序中,使用與選項1 類似的請求正文並處理回應正文透過使用此方法,您可以使用限制日誌記錄到特定路由。 APIRouters。

注意事項

  • 大型請求/回應主體(>伺服器 RAM)可能會導致記憶體問題。
  • 串流回應可能會遇到問題由於先前已讀取整個回應而導致客戶端出現問題或延遲返回。
  • 考慮傳回大型或串流響應的端點的使用限製或替代日誌記錄策略。

以上是如何在 Python FastAPI 中記錄原始 HTTP 請求和回應正文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn