Go のリバース プロキシで応答本文にアクセスする方法
Go では、httputil/reverseproxy パッケージがリバース プロキシを実装する便利な方法を提供しますサーバ。ただし、基になる HTTP リクエストの応答本文にアクセスするのは難しい場合があります。
元のコード
指定された Go コードは、単純なリバース プロキシ サーバーを示しています。
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) }
レスポンスボディへのアクセス
レスポンスボディにアクセスするには、httputil/reverseproxy パッケージが提供する ModifyResponse 関数を利用できます。この関数を使用すると、HTTP 応答をクライアントに送信する前に変更できます。
ModifyResponse 関数を実装すると、応答に対して次のようなさまざまな操作を実行できます。
例
方法の例を次に示します応答本文を変更できます:
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
この方法で ModifyResponse 関数を実装すると、クライアントに送信される前に応答本文を変更して読み取ることができます。
以上がGo のリバース プロキシの応答本文にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。