リバース プロキシでの応答本文へのアクセス
リバース プロキシを使用する場合、バックエンドから受信した応答本文にアクセスする必要が生じる場合があります。サーバ。この記事では、httputil パッケージを使用して Go で応答本文を取得する方法について詳しく説明します。
提供されたコード スニペットには、リクエストを Google に転送する単純なリバース プロキシがあります。
target := &url.URL{Scheme: "http", Host: "www.google.com"} proxy := httputil.NewSingleHostReverseProxy(target) http.Handle("/google", proxy) http.ListenAndServe(":8099", nil)
応答本文にアクセスするための鍵は、ReverseProxy タイプの ModifyResponse フィールドにあります。公式ドキュメントによると、ModifyResponse はバックエンドからの応答を変更できるオプションの関数です。
クライアントに送信する前に応答本文を読み取り、変更する例を次に示します。
import ( "bytes" "fmt" "io/ioutil" ) 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 } func main() { target, _ := url.Parse("http://example.com") proxy := httputil.NewSingleHostReverseProxy(target) proxy.ModifyResponse = rewriteBody http.Handle("/google", proxy) http.ListenAndServe(":8099", nil) }
このコードでは、rewriteBody 関数が応答本文を読み取り、それを変更し (この場合、「server」という単語を「schmerver」に置き換えます)、変更された本体を新しい応答本体として使用します。
以上がGo リバース プロキシで応答本文にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。