Zugriff auf den Antworttext im Reverse-Proxy mit HTTPutil
HTTPutil bietet eine leistungsstarke Reverse-Proxy-Implementierung in Go. Es fehlt jedoch die native Funktionalität für den Zugriff auf den Antworttext. In diesem Artikel wird eine Lösung zum Abrufen des Antworttexts und zum Ändern desselben mithilfe des Felds ModifyResponse in der ReverseProxy-Struktur untersucht.
HTTPutil Reverse Proxy Overview
Im bereitgestellten Codeausschnitt wird mithilfe von httputil.NewSingleHostReverseProxy ein Reverse-Proxy erstellt. Dieser Proxy leitet Anfragen an die Ziel-URL www.google.com weiter. Die Anfrage wird am /google-Endpunkt verarbeitet und überwacht Port 8099.
Antworttext abrufen und ändern
Um auf den Antworttext zuzugreifen und ihn zu ändern, verwenden wir ModifyResponse-Feld in der ReverseProxy-Struktur. Dieses Feld akzeptiert eine Funktion, die einen *http.Response-Zeiger als Argument akzeptiert und einen Fehler zurückgibt. Innerhalb dieser Funktion können wir den Antworttext mit ioutil.ReadAll lesen, den vorhandenen Text schließen, den Textinhalt ändern und den geänderten Text wieder in die Antwort einfügen. Der folgende Code demonstriert dies:
func rewriteBody(resp *http.Response) (err error) { b, err := ioutil.ReadAll(resp.Body) if err != nil { return err } err = resp.Body.Close() if err != nil { return err } b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) 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 }
In diesem Code lesen wir den Antworttext, ersetzen bestimmte Inhalte im Text und aktualisieren den Text und die Header entsprechend. Indem wir diese Funktion dem Feld ModifyResponse zuweisen, können wir den Antworttext abfangen und manipulieren, bevor er an den Client gesendet wird.
Das obige ist der detaillierte Inhalt vonWie greife ich auf den Antworttext in einem HTTPutil-Reverse-Proxy zu und ändere ihn?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!