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