美文网首页
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