> 백엔드 개발 > 파이썬 튜토리얼 > Python FastAPI에서 원시 HTTP 요청 및 응답을 기록하는 방법은 무엇입니까?

Python FastAPI에서 원시 HTTP 요청 및 응답을 기록하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-30 01:01:13
원래의
446명이 탐색했습니다.

How to Log Raw HTTP Requests and Responses in Python FastAPI?

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 클래스를 만듭니다. 이 접근 방식을 사용하면 APIRouter에 정의된 특정 경로로 로깅을 제한할 수 있습니다.

예:

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
로그인 후 복사

대용량 요청/응답 본문을 저장할 때의 제한 사항을 고려하세요. 메모리를 사용하고 BackgroundTask를 사용하여 요청 처리 차단을 방지합니다. 필요한 경우 로깅을 특정 경로로 제한하거나 스트리밍 응답을 반환하는 엔드포인트를 제외하세요.

위 내용은 Python FastAPI에서 원시 HTTP 요청 및 응답을 기록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿