Wie kann ich auf den Antworttext im Reverse-Proxy von Go zugreifen?

Patricia Arquette
Freigeben: 2024-11-19 16:39:02
Original
553 Leute haben es durchsucht

How can I access the response body in Go's reverse proxy?

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

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:

  • Lesen und den Antworttext ändern
  • Benutzerdefinierte Header festlegen
  • Antwort umleiten

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

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!

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