Maison > développement back-end > Golang > Comment puis-je accéder au corps de la réponse dans le proxy inverse de Go ?

Comment puis-je accéder au corps de la réponse dans le proxy inverse de Go ?

Patricia Arquette
Libérer: 2024-11-19 16:39:02
original
608 Les gens l'ont consulté

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

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

Dans Go, le package httputil/reverseproxy fournit un moyen pratique d'implémenter un proxy inverse serveur. Cependant, accéder au corps de réponse de la requête HTTP sous-jacente peut être difficile.

Code original

Le code Go donné démontre un simple serveur proxy inverse :

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

Accès au corps de réponse

Pour accéder au corps de réponse, vous pouvez utiliser le Fonction ModifyResponse fournie par le package httputil/reverseproxy. Cette fonction permet de modifier la réponse HTTP avant qu'elle ne soit envoyée au client.

En implémentant la fonction ModifyResponse, vous pouvez effectuer diverses opérations sur la réponse, notamment :

  • Lire et modifiez le corps de la réponse
  • Définissez les en-têtes personnalisés
  • Redirigez le réponse

Exemple

Voici un exemple de la façon dont vous pouvez modifier le corps de la réponse :

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

En implémentant la fonction ModifyResponse dans de cette façon, vous pouvez modifier et lire le corps de la réponse avant qu'il ne soit envoyé au client.

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