Im bereitgestellten Go-Code wird ein Reverse-Proxy eingerichtet, um Anfragen an Google umzuleiten. Um jedoch tiefere Einblicke zu gewinnen oder Antworten anzupassen, ist der Zugriff auf den Antworttext unerlässlich.
Die Lösung liegt in der Nutzung des ModifyResponse-Felds innerhalb der ReverseProxy-Struktur. In diesem Feld können Sie eine Funktion angeben, die die HTTP-Antwort ändert, bevor sie den Client erreicht.
Der folgende geänderte Code zeigt, wie der Antworttext gelesen und geändert wird:
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) }
Die ModifyResponse-Funktion liest den ursprünglichen Antworttext mithilfe von ioutil.ReadAll in einen Puffer. Anschließend wird der ursprüngliche resp.Body geschlossen und der Textinhalt geändert.
Um sicherzustellen, dass die Antwort gültig ist, wird ein neuer Text erstellt und resp.Body zugewiesen. Der Content-Length-Header wird ebenfalls aktualisiert, um die neue Textkörperlänge widerzuspiegeln.
Schließlich wird der geänderte Antworttext zur einfachen Überprüfung auf der Konsole gedruckt und die geänderte Antwort an den Client gesendet.
Das obige ist der detaillierte Inhalt vonWie überprüfe und ändere ich den Antworttext in einem Go-Reverse-Proxy?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!