Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Memeriksa Badan Permintaan HTTP Tanpa Kehilangan Data untuk Pengendali Seterusnya?
Memelihara Keadaan Permintaan Semasa Memeriksa Badan dengan HTTP.Handler
Dalam konteks melaksanakan pengendali HTTP, mengakses badan permintaan menggunakan kaedah seperti req.ParseForm() boleh mencipta dilema. Walaupun pemeriksaan sedemikian selalunya diperlukan, ia boleh menghabiskan aliran badan permintaan, menjadikannya tidak boleh digunakan untuk pengendali berikutnya (cth., proksi terbalik).
Masalah: Aliran Badan yang Terkuras
Apabila badan permintaan digunakan dengan kaedah panggilan seperti req.ParseForm(), Strim req.Body.Reader telah dikeringkan, tidak meninggalkan data yang tinggal untuk pengendali hiliran. Ini mengakibatkan ralat semasa pemajuan proksi, kerana panjang badan permintaan yang dijangka tidak lagi sepadan dengan keadaan habis.
Penyelesaian: Split the Body Stream
Untuk mengatasi cabaran ini , teknik yang melibatkan lapisan penimbal boleh digunakan. Dengan membaca kandungan permintaan ke dalam penimbal dan menggunakan penimbal itu untuk mencipta berbilang pembaca baharu, kami boleh memisahkan pemeriksaan daripada strim badan asal.
Langkah:
Contoh:
buf, _ := io.ReadAll(r.Body) rdr1 := io.NopCloser(bytes.NewBuffer(buf)) rdr2 := io.NopCloser(bytes.NewBuffer(buf)) doStuff(rdr1) r.Body = rdr2
Faedah:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memeriksa Badan Permintaan HTTP Tanpa Kehilangan Data untuk Pengendali Seterusnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!