相关疑难解决方法(0)

在中间件上下文中获取 starlette 请求正文

我有这样的中间件

class RequestContext(BaseHTTPMiddleware):
    async def dispatch(self, request: Request, call_next: RequestResponseEndpoint):
        request_id = request_ctx.set(str(uuid4()))  # generate uuid to request
        body = await request.body()
        if body:
            logger.info(...)  # log request with body
        else:
            logger.info(...)  # log request without body
 
        response = await call_next(request)
        response.headers['X-Request-ID'] = request_ctx.get()
        logger.info("%s" % (response.status_code))
        request_ctx.reset(request_id)

        return response
Run Code Online (Sandbox Code Playgroud)

因此该行body = await request.body()冻结了所有具有正文的请求,而我从所有请求中获得了 504 个请求。在这种情况下如何安全地读取请求正文?我只想记录请求参数。

python middleware http starlette fastapi

5
推荐指数
1
解决办法
3341
查看次数

标签 统计

fastapi ×1

http ×1

middleware ×1

python ×1

starlette ×1