Maison > développement back-end > Golang > le corps du texte

Comment accéder au corps de réponse dans un proxy inverse Go ?

Mary-Kate Olsen
Libérer: 2024-11-08 08:20:02
original
948 Les gens l'ont consulté

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

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)
Copier après la connexion

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal