Maison  >  Article  >  développement back-end  >  Comment accéder au corps de réponse dans un proxy inverse Go ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-08 08:20:02949parcourir

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)

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!

Déclaration:
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