NewSingleHostReverseProxy 非必要重写

来源:4-8 返回内容随心改1

ggangelo

2020-05-02

返回内容随心改这里面可以不用复制NewSingleHostReverseProxy 的实现方法,只要在new之后修改他的ModifyResponse值之后就可以了。
这个会更方便一些吧?

func main() {
	rs1 := "http://127.0.0.1:2003/base"
	url1,err1 := url.Parse(rs1)
	if err1 != nil{
		log.Println(err1)
	}
	proxy := httputil.NewSingleHostReverseProxy(url1)

	proxy.ModifyResponse = func(response *http.Response) error {
		oldPayload, err := ioutil.ReadAll(response.Body)
		if err != nil{
			return err
		}
		newPayLoad := []byte("hello " +string(oldPayload))
		response.Body = ioutil.NopCloser(bytes.NewBuffer(newPayLoad))
		response.ContentLength = int64(len(newPayLoad))
		response.Header.Set("Content-Length",fmt.Sprint(len(newPayLoad)))
		return nil
	}

	proxy.ErrorHandler = func(writer http.ResponseWriter, request *http.Request, err error) {
		writer.Write([]byte(err.Error()))
	}
	log.Println("Starting httpserver at "+ addr)
	log.Fatal(http.ListenAndServe(addr,proxy))
}
写回答

1回答

牛儿吃草

2020-05-02

是的,可以这样写。
单独摘出来NewSingleHostReverseProxy方法是为了拓展后面的,中间件支持和负载均衡器支持。

0
0

(打造简历金牌项目)Vue+Go 开发企业级微服务网关项目

简历中摒弃烂大街的培训机构项目,带你开发企业级微服务网关

1316 学习 · 352 问题

查看课程