Dalam kod Go yang disediakan, proksi terbalik disediakan untuk mengubah hala permintaan kepada Google. Walau bagaimanapun, untuk mendapatkan cerapan yang lebih mendalam atau menyesuaikan respons, mengakses badan tindak balas adalah penting.
Penyelesaian terletak pada memanfaatkan medan ModifyResponse dalam struct ReverseProxy. Medan ini membenarkan untuk menentukan fungsi yang mengubah suai respons HTTP sebelum ia sampai kepada klien.
Kod yang diubah suai berikut menunjukkan cara membaca dan mengubah suai badan respons:
package main import ( "bytes" "fmt" "io" "io/ioutil" "net/http" "net/http/httputil" "net/url" "strconv" ) func main() { target := &url.URL{Scheme: "http", Host: "www.google.com"} proxy := httputil.NewSingleHostReverseProxy(target) // Modify the response body before sending it to the client proxy.ModifyResponse = func(resp *http.Response) (err error) { b, err := ioutil.ReadAll(resp.Body) // Read the response body if err != nil { return err } err = resp.Body.Close() // Close the `Body` and `resp` if err != nil { return err } // Modify the response body b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) // Create a new `body` to keep the `Content-Length` and `Body` up-to-date body := ioutil.NopCloser(bytes.NewReader(b)) resp.Body = body resp.ContentLength = int64(len(b)) resp.Header.Set("Content-Length", strconv.Itoa(len(b))) fmt.Println("Modified response: ", string(b)) // See the modified response return nil } http.Handle("/google", proxy) http.ListenAndServe(":8099", nil) }
Fungsi ModifyResponse membaca badan tindak balas asal ke dalam penimbal menggunakan ioutil.ReadAll. Ia kemudian menutup resp.Body asal dan mengubah suai kandungan badan.
Untuk memastikan respons itu sah, badan baharu dibuat dan ditetapkan kepada resp.Body. Pengepala Panjang Kandungan juga dikemas kini untuk menggambarkan panjang badan baharu.
Akhir sekali, badan respons yang diubah suai dicetak ke konsol untuk pemeriksaan mudah dan respons yang diubah suai dihantar kepada pelanggan.
Atas ialah kandungan terperinci Bagaimanakah cara saya Memeriksa dan Mengubah Suai Badan Respons dalam Proksi Go Reverse?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!