Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Log Permintaan HTTP Mentah dan Badan Respons dalam Python FastAPI?

Bagaimanakah Saya Boleh Log Permintaan HTTP Mentah dan Badan Respons dalam Python FastAPI?

Susan Sarandon
Lepaskan: 2024-11-29 14:00:12
asal
542 orang telah melayarinya

How Can I Log Raw HTTP Request and Response Bodies in Python FastAPI?

Melog Badan Permintaan/Respons HTTP Mentah dalam Python FastAPI

Dalam Python FastAPI, anda boleh log badan JSON mentah permintaan/tindak balas tertentu laluan dengan menggunakan middleware atau kelas APIRoute tersuai.

Pilihan 1: Menggunakan Middleware

Middleware membenarkan anda mengendalikan permintaan dan respons sebelum ia diproses oleh titik akhir. Untuk mencipta middleware:

@app.middleware("http")
async def middleware(request: Request, call_next):
    # ...
    return await call_next(request)
Salin selepas log masuk

Gunakan kaedah request.body() atau request.stream() untuk menggunakan badan permintaan. Simpan badan dalam BackgroundTask untuk pengelogan kemudian.

Untuk badan respons, gunakan kod tersuai untuk membaca dan menyimpannya:

res_body = b''
async for chunk in response.body_iterator:
    res_body += chunk
Salin selepas log masuk

Anda kemudian boleh log kedua-dua badan permintaan dan respons dalam BackgroundTask untuk mengelakkan kesan masa tindak balas.

Pilihan 2: Menggunakan Laluan API Tersuai Kelas

Buat kelas APIRoute tersuai untuk mengendalikan badan permintaan dan tindak balas:

class LoggingRoute(APIRoute):
    # ...
    async def custom_route_handler(request: Request) -> Response:
        # ...
        return response
Salin selepas log masuk

Dalam pengendali laluan tersuai, gunakan badan permintaan dan kendalikan badan tindak balas sama seperti Pilihan 1 . Dengan menggunakan pendekatan ini, anda boleh mengehadkan pengelogan kepada laluan tertentu yang menggunakan APIRouters.

Pertimbangan

  • Badan permintaan/tindak balas yang besar (> RAM pelayan) boleh menyebabkan masalah ingatan.
  • Respons penstriman mungkin dihadapi isu atau kelewatan pada pihak pelanggan kerana keseluruhan respons dibaca sebelum kembali.
  • Pertimbangkan had penggunaan atau strategi pengelogan alternatif untuk titik akhir yang mengembalikan respons besar atau penstriman.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Log Permintaan HTTP Mentah dan Badan Respons dalam Python FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan