如下所示,简单做个代理
func main() {
remote, _ := url.Parse("http://www.xxxx.com")
proxy := httputil.NewSingleHostReverseProxy(remote)
log.Fatal( http.ListenAndServe(":9999", proxy))
}
我想把代理后返回的一些内容替换掉.但是怎么都成功不了. 下面这样怎么没反映? go 的 http 太"精髓"了.才学几天,摸不着门道. 哪位同学能指个路吗?谢谢.
func (t *transport) RoundTrip(req *http.Request) (res *http.Response, err error) {
res, err = t.RoundTripper.RoundTrip(req)
b, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
defer res.Body.Close()
b = bytes.Replace(b, []byte("Keywords"), []byte("xxxxxxxx"), -1)
body := ioutil.NopCloser(bytes.NewReader(b))
res.Body = body
res.ContentLength = int64(len(b))
res.Header.Set("Content-Length", strconv.Itoa(len(b)))
return res, nil
}
1
SuperFashi 2016-09-03 22:58:51 +08:00
|
2
sakeven 2016-09-04 00:03:35 +08:00
我猜是因为 res 的内容被压缩了,所以没被替换。
不显式的在 req 里声明压缩响应,是能成功的。 加一句这个试试 req.Header.Del("Accept-Encoding") |