httputil包提供了HTTP公用函数,是对net/http包的更常见函数的补充
- 反向代理的实现
NewSingleHostReverseProxy返回一个新的ReverseProxy。返回值会将请求的URL重写为target参数提供的协议、主机和基路径。如果target参数的Path字段为"/base",接收到的请求的URL.Path为"/dir",修改后的请求的URL.Path将会是"/base/dir"
func NewSingleHostReverseProxy(target *url.URL) *ReverseProxy
func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request)
ReverseProxy是一个HTTP处理器,它接收一个请求,发送给另一个服务端,将回复转发给客户端
package main
import (
"net/http"
"net/http/httputil"
"net/url"
)
func main() {
http.HandleFunc("/index.html", func(writer http.ResponseWriter, request *http.Request) {
url,_:=url.ParseRequestURI("http://www.baidu.com")
reverseProxy := httputil.NewSingleHostReverseProxy(url)
reverseProxy.ServeHTTP(writer,request)
})
http.ListenAndServe(":8080",nil)
}
当我们请求http://localhost:8080/index.html ,系统会自动代理到http://www.baidu.com主机上,实际方位的地址为http://www.baidu.com/index.html