Zugriff auf den Antworttext im Reverse-Proxy
Bei der Arbeit mit Reverse-Proxy müssen Sie möglicherweise auf den vom Backend empfangenen Antworttext zugreifen Server. In diesem Artikel wird erläutert, wie Sie den Antworttext in Go mithilfe des httputil-Pakets abrufen.
Im bereitgestellten Code-Snippet haben Sie einen einfachen Reverse-Proxy, der Anfragen an Google weiterleitet:
target := &url.URL{Scheme: "http", Host: "www.google.com"} proxy := httputil.NewSingleHostReverseProxy(target) http.Handle("/google", proxy) http.ListenAndServe(":8099", nil)
Der Schlüssel zum Zugriff auf den Antworttext liegt im ModifyResponse-Feld des ReverseProxy-Typs. Gemäß der offiziellen Dokumentation ist ModifyResponse eine optionale Funktion, mit der Sie die Antwort vom Backend aus ändern können.
Hier ist ein Beispiel, das den Antworttext liest und ändert, bevor er an den Client gesendet wird:
import ( "bytes" "fmt" "io/ioutil" ) 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 } func main() { target, _ := url.Parse("http://example.com") proxy := httputil.NewSingleHostReverseProxy(target) proxy.ModifyResponse = rewriteBody http.Handle("/google", proxy) http.ListenAndServe(":8099", nil) }
In diesem Code liest die rewriteBody-Funktion den Antworttext, ändert ihn (in diesem Fall ersetzt sie das Wort „server“ durch „schmerver“) und legt dann den geänderten Text als neuen Antworttext fest.
Das obige ist der detaillierte Inhalt vonWie greife ich in einem Go-Reverse-Proxy auf den Antworttext zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!