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
Susan Sarandonasal
2024-11-29 14:00:12639semak imbas

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)

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

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

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!

Kenyataan:
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 sebelumnya:Apa itu Computer Vision? (1)Artikel seterusnya:Apa itu Computer Vision? (1)