52580


Go言語の標準ライブラリ（<https://golang.org/pkg/net/http/httputil/#ReverseProxy>）を用いてリバースプロキシを生成しています。下記のように実装したServeHTTP()内でHTTPレスポンスのボディを取得したいのですが、ResponseWriterからボディを取得する方法はありますか？

[code]

    func (rp *reverseproxy) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    　　rp.ServeHTTP(w, r)
    　　//ここでHTTPレスポンスのボディを表示したい
    }
    
[/code]


CC BY-SA 4.0
2019-02-04T09:55:52.923
52540
2019-02-07T04:05:48.870
19297
question
go
GoのリバースプロキシのResponsewriterからHTTPレスポンスのBodyを取得する方法


メモリを必要としますが、これでどうでしょうか？  
(先の回答はミスがありましたので修正しました)

[code]

    type wrapper struct {
        http.ResponseWriter
        writer io.Writer
    }
    
    func (w *wrapper) Write(b []byte) (int, error) {
        return w.writer.Write(b)
    }
    
    func (rp *ReverseProxy) ServeHTTP(w http.ResponseWriter, r *http.Request) {
        buff := bytes.NewBuffer(nil)
        rp.ReverseProxy.ServeHTTP(
            &wrapper{w, io.MultiWriter(w, buff)},
            r,
        )
        // ここでbuffの内容を参照すればOK
        fmt.Print(buff.String())
    }
    
[/code]


CC BY-SA 4.0
2019-02-06T02:58:13.897
52580
2019-02-07T04:05:48.870
2019-02-07T04:05:48.870
11051
11051
52540
answer