Golang:如何读取ReverseProxy的响应主体?

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有一个Transport领域。您可以使用它来修改响应。例如:

type transport struct {

http.RoundTripper

}

func (t *transport) RoundTrip(req *http.Request) (resp *http.Response, err error) {

resp, err = t.RoundTripper.RoundTrip(req)

if err != nil {

return nil, err

}

b, err := ioutil.ReadAll(resp.Body)

if err != nil {

return nil, err

}

err = resp.Body.Close()

if err != nil {

return nil, err

}

b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1)

body := ioutil.NopCloser(bytes.NewReader(b))

resp.Body = body

resp.ContentLength = int64(len(b))

resp.Header.Set("Content-Length", strconv.Itoa(len(b)))

return resp, nil

}

// ...

proxy := httputil.NewSingleHostReverseProxy(target)

proxy.Transport = &transport{http.DefaultTransport}

整个场景的操场示例:http :

//play.golang.org/p/b0S5CbCMrI。

以上是 Golang:如何读取ReverseProxy的响应主体? 的全部内容, 来源链接: utcz.com/qa/419093.html

回到顶部