美文网首页
gin 路由转发(反向代理)

gin 路由转发(反向代理)

作者: 区块东西 | 来源:发表于2020-10-23 09:08 被阅读0次

之前用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)

}

相关文章

网友评论

      本文标题:gin 路由转发(反向代理)

      本文链接:https://www.haomeiwen.com/subject/pycjihtx.html