So greifen Sie im Reverse-Proxy von Go auf den Antworttext zu
In Go bietet das Paket httputil/reverseproxy eine praktische Möglichkeit, einen Reverse-Proxy zu implementieren Server. Der Zugriff auf den Antworttext der zugrunde liegenden HTTP-Anfrage kann jedoch eine Herausforderung sein.
Originalcode
Der angegebene Go-Code demonstriert einen einfachen Reverse-Proxy-Server:
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) }
Zugriff auf den Antworttext
Um auf den Antworttext zuzugreifen, können Sie die ModifyResponse-Funktion verwenden, die vom httputil/reverseproxy-Paket bereitgestellt wird. Mit dieser Funktion können Sie die HTTP-Antwort ändern, bevor sie an den Client gesendet wird.
Durch die Implementierung der ModifyResponse-Funktion können Sie verschiedene Vorgänge für die Antwort ausführen, darunter:
Beispiel
Hier ist ein Beispiel dafür Sie können den Antworttext ändern:
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
Durch die Implementierung der ModifyResponse-Funktion auf diese Weise können Sie den Antworttext ändern und lesen, bevor er an den Client gesendet wird.
Das obige ist der detaillierte Inhalt vonWie kann ich auf den Antworttext im Reverse-Proxy von Go zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!