Heim > Backend-Entwicklung > Python-Tutorial > Wie protokolliere ich rohe HTTP-Anfragen und -Antworten in Python FastAPI?

Wie protokolliere ich rohe HTTP-Anfragen und -Antworten in Python FastAPI?

Susan Sarandon
Freigeben: 2024-11-30 01:01:13
Original
446 Leute haben es durchsucht

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

Wie protokolliere ich rohe HTTP-Anfragen/-Antworten in Python FastAPI?

FastAPI bietet mehrere Methoden zum Erfassen und Protokollieren von rohen HTTP-Anfragen und -Antworten. Eingehen auf spezifische Anforderungen und Leistungsaspekte.

Option 1: Middleware

Mit Middleware können Sie Anfragen und Antworten abfangen und verarbeiten. Sie können eine Middleware erstellen, die den Anforderungstext in einem Stream verarbeitet und speichert. Lesen Sie den Antworttext in ein Bytes-Objekt ein und geben Sie eine benutzerdefinierte Antwort zurück. Verwenden Sie eine BackgroundTask, um die Daten asynchron zu protokollieren, um eine Beeinträchtigung der Antwortzeit zu vermeiden.

Beispiel:

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)
Nach dem Login kopieren

Option 2: Benutzerdefinierte APIRoute-Klasse

Erstellen Sie eine benutzerdefinierte APIRoute-Klasse, um die Anforderungs- und Antworttexte zu bearbeiten. Mit diesem Ansatz können Sie die Protokollierung auf bestimmte Routen beschränken, die in einem APIRouter definiert sind.

Beispiel:

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
Nach dem Login kopieren

Berücksichtigen Sie die Einschränkungen beim Speichern großer Anforderungs-/Antworttexte Speicher und verwenden Sie eine BackgroundTask, um eine Blockierung der Anforderungsverarbeitung zu vermeiden. Beschränken Sie bei Bedarf die Protokollierung auf bestimmte Routen oder schließen Sie Endpunkte aus, die Streaming-Antworten zurückgeben.

Das obige ist der detaillierte Inhalt vonWie protokolliere ich rohe HTTP-Anfragen und -Antworten in Python FastAPI?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage