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!