Maison  >  Article  >  développement back-end  >  Comment accéder et modifier le corps de la réponse dans un proxy inverse HTTPutil ?

Comment accéder et modifier le corps de la réponse dans un proxy inverse HTTPutil ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 14:49:02903parcourir

How to Access and Modify Response Body in an HTTPutil Reverse Proxy?

Accès au corps de réponse dans le proxy inverse avec HTTPutil

HTTPutil fournit une puissante implémentation de proxy inverse dans Go. Cependant, il lui manque des fonctionnalités natives pour accéder au corps de la réponse. Cet article explore une solution pour récupérer le corps de la réponse et le modifier à l'aide du champ ModifyResponse dans la structure ReverseProxy.

Présentation du proxy inverse HTTPutil

Dans l'extrait de code fourni, un proxy inverse est créé à l'aide de httputil.NewSingleHostReverseProxy. Ce proxy transmet les requêtes à l'URL cible, www.google.com. La requête est traitée au niveau du point de terminaison /google et écoute sur le port 8099.

Récupérer et modifier le corps de la réponse

Pour accéder et modifier le corps de la réponse, nous utilisons le ModifyResponse dans la structure ReverseProxy. Ce champ accepte une fonction qui prend un pointeur *http.Response comme argument et renvoie une erreur. Dans cette fonction, nous pouvons lire le corps de la réponse à l'aide de ioutil.ReadAll, fermer le corps existant, modifier le contenu du corps et remettre le corps modifié dans la réponse. Le code suivant le démontre :

func rewriteBody(resp *http.Response) (err error) {
    b, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return  err
    }
    err = resp.Body.Close()
    if err != nil {
        return err
    }
    b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1)
    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
}

Dans ce code, nous lisons le corps de la réponse, remplaçons le contenu spécifique dans le corps et mettons à jour le corps et les en-têtes en conséquence. En attribuant cette fonction au champ ModifyResponse, nous pouvons intercepter et manipuler 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!

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