Dalam kod Go yang diberikan, proksi terbalik disediakan untuk mengubah hala permintaan ke www.google.com. Semasa proksi terbalik berfungsi dengan betul, persoalan timbul: bagaimanakah seseorang boleh mengakses badan tindak balas permintaan yang diproksi?
Penyelesaian untuk ini terletak pada pakej httputil, yang menyediakan jenis ReverseProxy. Dalam versi terkini pakej, ReverseProxy menawarkan fungsi ModifyResponse pilihan yang membolehkan penyesuaian dan pemeriksaan respons yang datang dari bahagian belakang.
Secara khusus, dengan melaksanakan fungsi ini, pembangun boleh mengubah suai *http.Response sebelum lulus itu kepada klien. Satu kes penggunaan yang berpotensi untuk ModifyResponse ialah membaca dan memanipulasi badan tindak balas.
Untuk menunjukkan perkara ini, pertimbangkan kod yang diubah suai berikut:
package main import ( "bytes" "fmt" "io/ioutil" "net/http" "net/http/httputil" "net/url" ) func main() { target := &url.URL{Scheme: "http", Host: "www.google.com"} proxy := httputil.NewSingleHostReverseProxy(target) proxy.ModifyResponse = func(resp *http.Response) (err error) { b, err := ioutil.ReadAll(resp.Body) // Read the HTML response body if err != nil { return err } resp.Body.Close() // The body is closed by the ReadAll function, but it's good practice to close it again b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) // Modify the HTML response by replacing "server" with "schmerver" newBody := ioutil.NopCloser(bytes.NewReader(b)) resp.Body = newBody resp.ContentLength = int64(len(b)) resp.Header.Set("Content-Length", strconv.Itoa(len(b))) fmt.Println(resp) // Print the modified response for debugging purposes return nil } http.Handle("/google", proxy) http.ListenAndServe(":8099", nil) }
Dalam kod ini, fungsi ModifyResponse ditakrifkan untuk membaca badan respons HTML, ubah suainya dengan menggantikan rentetan tertentu, dan kemudian tetapkan badan yang diubah suai sebagai badan tindak balas. Dengan mengendalikan laluan URL "/google", permintaan ke www.google.com akan diproksikan dan respons yang diubah suai akan dihantar semula kepada klien.
Atas ialah kandungan terperinci Bagaimana untuk Memeriksa dan Mengubah Suai Badan Respons Proksi Songsang dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!