首页 > 后端开发 > Python教程 > 如何在 Python FastAPI 中记录原始 HTTP 请求和响应正文?

如何在 Python FastAPI 中记录原始 HTTP 请求和响应正文?

Susan Sarandon
发布: 2024-11-29 14:00:12
原创
597 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板