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) }
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 :
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
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!