Accès au corps de réponse dans le proxy inverse
Lorsque vous travaillez avec le proxy inverse, vous pouvez rencontrer le besoin d'accéder au corps de réponse reçu du backend serveur. Cet article explique comment récupérer le corps de la réponse dans Go à l'aide du package httputil.
Dans l'extrait de code fourni, vous disposez d'un simple proxy inverse qui transmet les requêtes à Google :
target := &url.URL{Scheme: "http", Host: "www.google.com"} proxy := httputil.NewSingleHostReverseProxy(target) http.Handle("/google", proxy) http.ListenAndServe(":8099", nil)
La clé pour accéder au corps de la réponse réside dans le champ ModifyResponse de type ReverseProxy. Selon la documentation officielle, ModifyResponse est une fonction facultative qui vous permet de modifier la réponse depuis le backend.
Voici un exemple qui lit et modifie le corps de la réponse avant de l'envoyer au client :
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) }
Dans ce code, la fonction rewriteBody lit le corps de la réponse, le modifie (dans ce cas, en remplaçant le mot « serveur » par « schmerver »), puis définit le corps modifié comme nouveau corps de réponse.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!