Heim >Backend-Entwicklung >Golang >Wie greife ich in einem Go-Reverse-Proxy auf den Antworttext zu?

Wie greife ich in einem Go-Reverse-Proxy auf den Antworttext zu?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-08 08:20:02963Durchsuche

How to Access the Response Body in a Go Reverse Proxy?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn