Golang: how to read response body of ReverseProxy?

前端 未结 4 731
一整个雨季
一整个雨季 2021-01-31 05:13
package main

import (
    \"net/http\"
    \"net/http/httputil\"
    \"net/url\"
)

func main() {
    target := &url.URL{Scheme: \"http\", Host: \"www.google.com\"}         


        
4条回答
  •  感情败类
    2021-01-31 05:23

    I don't know best solution. But you can do something like this:

    package main
    
    import (
        "fmt"
        "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", CustomHandler(proxy))
        http.ListenAndServe(":8099", nil)
    }
    
    func CustomHandler(h http.Handler) http.HandlerFunc {
        return func(res http.ResponseWriter, req *http.Request) {
            h.ServeHTTP(NewCustomWriter(res), req)
        }
    }
    
    type customWriter struct {
        http.ResponseWriter
    }
    
    func NewCustomWriter(w http.ResponseWriter) *customWriter {
        return &customWriter{w}
    }
    
    func (c *customWriter) Header() http.Header {
        return c.ResponseWriter.Header()
    }
    
    func (c *customWriter) Write(data []byte) (int, error) {
        fmt.Println(string(data)) //get response here
        return c.ResponseWriter.Write(data)
    }
    
    func (c *customWriter) WriteHeader(i int) {
        c.ResponseWriter.WriteHeader(i)
    }
    

提交回复
热议问题