func main(){ router := gin.Default()//创建一个router router.Use(MiddleWare())//中间件,起拦截器的作用 router.Any("/*action", Forward)//所有请求都会经过Forward函数转发 router.Run(":8000") } func Forward(c *gin.Context) { targetHost := &httputils.TargetHost{ Host: "www.baidu.com", IsHttps: false, } HostReverseProxy(c.Writer, c.Request, targetHost) } func HostReverseProxy(w http.ResponseWriter, req *http.Request, targetHost *TargetHost) { host := "" if targetHost.IsHttps { host = host + "https://" } else { host = host + "http://" } remote, err := url.Parse(host + targetHost.Host) if err != nil { log.Errorf("err:%s", err) w.WriteHeader(http.StatusInternalServerError) return } proxy := httputil.NewSingleHostReverseProxy(remote) if targetHost.IsHttps { tls, err := GetVerTLSConfig(targetHost.CAPath) if err != nil { log.Errorf("https crt error: %s", err) w.WriteHeader(http.StatusInternalServerError) return } var pTransport http.RoundTripper = &http.Transport{ Dial: func(netw, addr string) (net.Conn, error) { c, err := net.DialTimeout(netw, addr, time.Second*time.Duration(DialTimeout)) if err != nil { return nil, err } return c, nil }, ResponseHeaderTimeout: time.Second * time.Duration(ResponseHeaderTimeout), TLSClientConfig: tls, } proxy.Transport = pTransport } proxy.ServeHTTP(w, req) } type TargetHost struct { Host string IsHttps bool CAPath string } func MiddleWare() gin.HandlerFunc { return func(c *gin.Context) { account := c.Request.Header.Get("ename")//从请求头中获取ename字段 if account == "" { c.JSON(http.StatusOK, httputils.Response{ Code: 400002, Message: "用户未登录", }) c.Abort() return } fmt.Println("before middleware") c.Set("request", "clinet_request") c.Next() fmt.Println("before middleware") } }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Redis(十二):redis请求转发的实现
- SpringCloud组件: GateWay整合Eureka转发服务请求
- HttpServletRequest 接口、HttpServletResponse 接口、请求转发与重定向
- node.js创建aria2代理服务器:使用net.socket转发rpc或http request请求,替换websocket
- iOS 消息转发
- SSH端口转发
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构与算法分析
张琨、张宏、朱保平 / 人民邮电出版社 / 2016-2-1 / 45
本书共分10章,主要包括第1章绪论,第2章线性表,第3章栈和队列,第4章串,第5章数组和广义表,第6章 树和二叉树,第7章图,第8章查找,第9章内部排序,第10章算法分析。其内容模块涵盖了课堂教学、习题课教学、实验教学、自学辅导、综合训练等。立体化教材的使用在提高教学效率、增强教学效果、加大教学信息量、培养学生的应用与实践能力。 作者简介一起来看看 《数据结构与算法分析》 这本书的介绍吧!