- Published on
gin 路由转发(反向代理)
- Authors
- Name
- JiGu
- @crypto20x
之前用springboot写了一个服务,要整合到公司的go里面 直接路由转发即可。
gin 通配符
- : 冒号
router.GET("chaincode/:name", handle)
请求结果
/chaincode/query 匹配
/chaincode/invoke 匹配
/chaincode/v1/find 不匹配
/chaincode/ 不匹配
- * 星号
router.GET("chaincode/*name", handle)
请求结果
/chaincode/query 匹配
/chaincode/invoke 匹配
/chaincode/v1/find 匹配
/chaincode/ 匹配
路由转发
r := gin.Default()
cc := r.Group("/chaincode")
cc.POST("/:name", api.ReverseProxy)
- api包
package api
import(
"net/http/httputil"
"net/url"
)
func ReverseProxy(c *gin.Context) {
//转发的url,端口
target := "127.0.0.1:8080"
// director := func(req *http.Request) {
// r := c.Request
// req = r
// req.URL.Scheme = "http"
// req.URL.Host = "http://" + target
// req.Host = "http://" + target
// }
// proxy := &httputil.ReverseProxy{Director: director}
上面的接口报错: http: proxy error: unsupported protocol scheme ""
好像被废弃了
u := &url.URL{}
//转发的协议,如果是https,写https.
u.Scheme = "http"
u.Host = target
proxy := httputil.NewSingleHostReverseProxy(u)
//重写出错回调
proxy.ErrorHandler = func(rw http.ResponseWriter, req *http.Request, err error) {
log.Printf("http: proxy error: %v", err)
ret := fmt.Sprintf("http proxy error %v", err)
//写到body里
rw.Write([]byte(ret))
}
proxy.ServeHTTP(c.Writer, c.Request)
}