Maison > développement back-end > Golang > Comment inspecter et modifier le corps de réponse d'un proxy inverse en Go ?

Comment inspecter et modifier le corps de réponse d'un proxy inverse en Go ?

Patricia Arquette
Libérer: 2024-11-13 07:17:02
original
1059 Les gens l'ont consulté

How to Inspect and Modify the Response Body of a Reverse Proxy in Go?

Comment inspecter le corps de réponse du proxy inverse

Dans le code Go donné, un proxy inverse est configuré pour rediriger les demandes vers www.google.com. Alors que le proxy inverse fonctionne correctement, la question se pose : comment accéder au corps de réponse de la requête proxy ?

La solution à ce problème réside dans le package httputil, qui fournit le type ReverseProxy. Dans la dernière version du package, ReverseProxy propose une fonction ModifyResponse facultative qui permet de personnaliser et d'inspecter la réponse provenant du backend.

Plus précisément, en implémentant cette fonction, les développeurs peuvent modifier le *http.Response avant de transmettre au client. Un cas d'utilisation potentiel de ModifyResponse consiste à lire et à manipuler le corps de la réponse.

Pour démontrer cela, considérons le code modifié suivant :

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "net/http"
    "net/http/httputil"
    "net/url"
)

func main() {
    target := &url.URL{Scheme: "http", Host: "www.google.com"}
    proxy := httputil.NewSingleHostReverseProxy(target)

    proxy.ModifyResponse = func(resp *http.Response) (err error) {
        b, err := ioutil.ReadAll(resp.Body) // Read the HTML response body
        if err != nil {
            return err
        }

        resp.Body.Close() // The body is closed by the ReadAll function, but it's good practice to close it again
        b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) // Modify the HTML response by replacing "server" with "schmerver"

        newBody := ioutil.NopCloser(bytes.NewReader(b))
        resp.Body = newBody
        resp.ContentLength = int64(len(b))
        resp.Header.Set("Content-Length", strconv.Itoa(len(b)))
        fmt.Println(resp) // Print the modified response for debugging purposes

        return nil
    }

    http.Handle("/google", proxy)
    http.ListenAndServe(":8099", nil)
}
Copier après la connexion

Dans ce code, la fonction ModifyResponse est définie pour lire le corps de la réponse HTML, modifiez-le en remplaçant une chaîne particulière, puis définissez le corps modifié comme corps de la réponse. En gérant le chemin d'URL "/google", les requêtes adressées à www.google.com seront transmises par proxy et la réponse modifiée sera renvoyée 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