获取 FastAPI 响应的内容长度
Get content-length of FastAPI response
我正在尝试在服务器端获取 FastAPI 响应的内容长度以进行日志记录。这可能吗?谢谢
@app.get("/foo")
async def foo(background_tasks: BackgroundTasks):
data = {"foo": "foo"}
response_content_length = get_content_length()
background_tasks.add_task(log, response_content_length )
return data
您可以通过继承 APIRoute class 创建自己的路由,现在您应该可以记录所有内容,而无需重复自己。
from fastapi import FastAPI, Request, Response, Body, BackgroundTasks, APIRouter
from fastapi.routing import APIRoute
from typing import Callable, List
class ContextIncludedRoute(APIRoute):
def get_route_handler(self) -> Callable:
original_route_handler = super().get_route_handler()
async def custom_route_handler(request: Request) -> Response:
response: Response = await original_route_handler(request)
content_length = response.headers["content-length"]
print(content_length)
return response
return custom_route_handler
app = FastAPI()
router = APIRouter(route_class=ContextIncludedRoute)
@router.post("/dummy")
async def dummy():
return {"foo":"foo"}
app.include_router(router)
我正在尝试在服务器端获取 FastAPI 响应的内容长度以进行日志记录。这可能吗?谢谢
@app.get("/foo")
async def foo(background_tasks: BackgroundTasks):
data = {"foo": "foo"}
response_content_length = get_content_length()
background_tasks.add_task(log, response_content_length )
return data
您可以通过继承 APIRoute class 创建自己的路由,现在您应该可以记录所有内容,而无需重复自己。
from fastapi import FastAPI, Request, Response, Body, BackgroundTasks, APIRouter
from fastapi.routing import APIRoute
from typing import Callable, List
class ContextIncludedRoute(APIRoute):
def get_route_handler(self) -> Callable:
original_route_handler = super().get_route_handler()
async def custom_route_handler(request: Request) -> Response:
response: Response = await original_route_handler(request)
content_length = response.headers["content-length"]
print(content_length)
return response
return custom_route_handler
app = FastAPI()
router = APIRouter(route_class=ContextIncludedRoute)
@router.post("/dummy")
async def dummy():
return {"foo":"foo"}
app.include_router(router)