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端口转发
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
VISUAL BASIC 6.0 WINDOWS API讲座
王国荣 / 人民邮电出版社 / 1999-06-01 / 76.00元
本书全面介绍了在Visual Basic 6.0中如何调用Windows API的技术,特别是结合读者在应用中经常遇到的具体问题编写了许多应用范例,书中还给出了API函数的速查表。本书主要内容包括: Windows API的基本概念和调用方法,资源文件的使用,Windows的消息系统及其应用,API在绘图中的应用,多媒体文件的播放,特殊命令按钮的制作等。 本书适用于已熟悉Visual Basic的一起来看看 《VISUAL BASIC 6.0 WINDOWS API讲座》 这本书的介绍吧!
在线进制转换器
各进制数互转换器
HEX CMYK 转换工具
HEX CMYK 互转工具