Mengakses Badan Respons dalam Proksi Songsang dengan HTTPutil
HTTPutil menyediakan pelaksanaan proksi songsang yang berkuasa dalam Go. Walau bagaimanapun, ia tidak mempunyai fungsi asli untuk mengakses badan tindak balas. Artikel ini meneroka penyelesaian untuk mendapatkan semula badan respons dan mengubah suai menggunakan medan ModifyResponse dalam struct ReverseProxy.
Ikhtisar Proksi Balik HTTPutil
Dalam coretan kod yang disediakan, proksi terbalik dibuat menggunakan httputil.NewSingleHostReverseProxy. Proksi ini memajukan permintaan ke URL sasaran, www.google.com. Permintaan dikendalikan di titik akhir /google dan mendengar pada port 8099.
Dapatkan dan Ubah Suai Badan Respons
Untuk mengakses dan mengubah suai badan respons, kami menggunakan ModifyResponse medan dalam struct ReverseProxy. Medan ini menerima fungsi yang mengambil *http.Response pointer sebagai hujah dan mengembalikan ralat. Dalam fungsi ini, kita boleh membaca badan tindak balas menggunakan ioutil.ReadAll, tutup badan sedia ada, ubah suai kandungan badan dan tetapkan badan diubah suai semula ke dalam respons. Kod berikut menunjukkan perkara ini:
func rewriteBody(resp *http.Response) (err error) { b, err := ioutil.ReadAll(resp.Body) if err != nil { return err } err = resp.Body.Close() if err != nil { return err } b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) body := ioutil.NopCloser(bytes.NewReader(b)) resp.Body = body resp.ContentLength = int64(len(b)) resp.Header.Set("Content-Length", strconv.Itoa(len(b))) return nil }
Dalam kod ini, kami membaca isi respons, menggantikan kandungan tertentu dalam kandungan dan mengemas kini isi dan pengepala dengan sewajarnya. Dengan memperuntukkan fungsi ini pada medan ModifyResponse, kami boleh memintas dan memanipulasi badan respons sebelum ia dihantar kepada klien.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses dan Mengubah Suai Badan Respons dalam Proksi Terbalik HTTPutil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!