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
Freigeben: 2024-11-08 08:20:02
Original
987 Leute haben es durchsucht

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)
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage