Cara Mengakses Badan Respons dalam Proksi Terbalik Go
Dalam Go, pakej httputil/reverseproxy menyediakan cara yang mudah untuk melaksanakan proksi terbalik pelayan. Walau bagaimanapun, mengakses badan respons permintaan HTTP yang mendasari mungkin mencabar.
Kod Asal
Kod Go yang diberikan menunjukkan pelayan proksi terbalik yang mudah:
package main import ( "net/http" "net/http/httputil" "net/url" ) func main() { target := &url.URL{Scheme: "http", Host: "www.google.com"} proxy := httputil.NewSingleHostReverseProxy(target) http.Handle("/google", proxy) http.ListenAndServe(":8099", nil) }
Mengakses Badan Respons
Untuk mengakses badan respons, anda boleh menggunakan fungsi ModifyResponse yang disediakan oleh pakej httputil/reverseproxy. Fungsi ini membenarkan anda mengubah suai respons HTTP sebelum ia dihantar kepada klien.
Dengan melaksanakan fungsi ModifyResponse, anda boleh melakukan pelbagai operasi pada respons, termasuk:
Contoh
Berikut ialah contoh cara anda boleh mengubah suai badan respons:
func rewriteBody(resp *http.Response) (err error) { b, err := ioutil.ReadAll(resp.Body) // Read html if err != nil { return err } err = resp.Body.Close() if err != nil { return err } b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) // replace html 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 } target, _ := url.Parse("http://example.com") proxy := httputil.NewSingleHostReverseProxy(target) proxy.ModifyResponse = rewriteBody
Dengan melaksanakan fungsi ModifyResponse dengan cara ini, anda boleh mengubah suai dan membaca badan respons sebelum ia dihantar kepada pelanggan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses badan respons dalam proksi terbalik Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!