From 7babed0d74673099816304a2491a60b80b4b0ad4 Mon Sep 17 00:00:00 2001 From: gaoshiyao Date: Wed, 6 Nov 2019 19:08:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=B7=AF=E7=94=B1=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/conf.go | 2 +- src/handler/counthandler.go | 4 +- src/handler/proxyhandler.go | 2 +- src/tools/proxy.go | 144 ++++++++++++++++++++++++++++++++++++ 4 files changed, 148 insertions(+), 4 deletions(-) create mode 100644 src/tools/proxy.go diff --git a/src/config/conf.go b/src/config/conf.go index 3f2af63..db0b7f9 100644 --- a/src/config/conf.go +++ b/src/config/conf.go @@ -7,7 +7,7 @@ var ( ) var ProxyConf = struct { - UUID string `json:"uuid"` + MeshId string `json:"meshId"` Url string `json:"url"` Method string `json:"method"` Params []Param `json:"params"` diff --git a/src/handler/counthandler.go b/src/handler/counthandler.go index 0072b96..b51d1d8 100644 --- a/src/handler/counthandler.go +++ b/src/handler/counthandler.go @@ -12,9 +12,9 @@ func GetCount(c *gin.Context) { if err != nil { c.Error(err) } - ic, err := redis.Get("bgproxy" + config.ProxyConf.UUID) + ic, err := redis.Get("bgproxy" + config.ProxyConf.MeshId) c.JSON(200, gin.H{ - "Key": fmt.Sprintf("bgproxy" + config.ProxyConf.UUID), + "Key": fmt.Sprintf("bgproxy" + config.ProxyConf.MeshId), "Count": ic, }) } diff --git a/src/handler/proxyhandler.go b/src/handler/proxyhandler.go index eecdd5d..861fcc6 100644 --- a/src/handler/proxyhandler.go +++ b/src/handler/proxyhandler.go @@ -76,7 +76,7 @@ func count() error { if err != nil { return err } - ic, err := redis.Incr("bgproxy" + config.ProxyConf.UUID) + ic, err := redis.Incr("bgproxy" + config.ProxyConf.MeshId) _, err = ic.Result() return err } diff --git a/src/tools/proxy.go b/src/tools/proxy.go new file mode 100644 index 0000000..26e5051 --- /dev/null +++ b/src/tools/proxy.go @@ -0,0 +1,144 @@ +package tools + +import ( + "errors" + "fmt" + "io/ioutil" + "net" + "net/http" + "strings" +) + +//ProxySend , http请求 +func ProxySend(incomingReq *http.Request, sendType string, url string, body string, header map[string]string) (result []byte, err error) { + client := &http.Client{} + var outgoingReq *http.Request + if len(body) > 0 { + outgoingReq, err = http.NewRequest(sendType, url, strings.NewReader(body)) + if err != nil { + fmt.Println(err) + } + } else { + outgoingReq, _ = http.NewRequest(sendType, url, nil) + } + if header == nil { + header = make(map[string]string) + } + if incomingReq != nil { + b3Headers := getForwardHeaders(incomingReq) + for k, v := range b3Headers { + header[k] = v + } + } + for k, v := range header { + outgoingReq.Header.Set(k, v) + } + resp, err := client.Do(outgoingReq) + if err != nil { + return nil, err + } else { + defer resp.Body.Close() + body, erra := ioutil.ReadAll(resp.Body) + return body, erra + } +} + +//ProxySend , http请求 +func ProxySendRes(incomingReq *http.Request, sendType string, url string, body string, header map[string]string) (result *http.Response, err error) { + client := &http.Client{} + var outgoingReq *http.Request + if len(body) > 0 { + outgoingReq, err = http.NewRequest(sendType, url, strings.NewReader(body)) + if err != nil { + fmt.Println(err) + } + } else { + outgoingReq, _ = http.NewRequest(sendType, url, nil) + } + if header == nil { + header = make(map[string]string) + } + if incomingReq != nil { + b3Headers := getForwardHeaders(incomingReq) + for k, v := range b3Headers { + header[k] = v + } + } + for k, v := range header { + outgoingReq.Header.Set(k, v) + } + resp, err := client.Do(outgoingReq) + return resp, err +} + +//GetCookieStr , 获取cookie字符串 +func GetCookieStr(req *http.Request) (str string, err error) { + cookies := req.Cookies() + _, err = req.Cookie("awetoken") + if err != nil { + err = errors.New("用户未登录") + return "", err + } else { + for _, v := range cookies { + str += v.Name + "=" + v.Value + ";" + } + return str, nil + } +} + +func getForwardHeaders(incomingReq *http.Request) map[string]string { + headers := make(map[string]string) + xRequestID := incomingReq.Header.Get("x-request-id") + if len(xRequestID) > 0 { + headers["x-request-id"] = incomingReq.Header.Get("x-request-id") + headers["x-b3-traceid"] = incomingReq.Header.Get("x-b3-traceid") + headers["x-b3-spanid"] = incomingReq.Header.Get("x-b3-spanid") + if len(incomingReq.Header.Get("x-b3-parentspanid")) > 0 { + headers["x-b3-parentspanid"] = incomingReq.Header.Get("x-b3-parentspanid") + } + headers["x-b3-sampled"] = incomingReq.Header.Get("x-b3-sampled") + if len(incomingReq.Header.Get("x-b3-flags")) > 0 { + headers["x-b3-flags"] = incomingReq.Header.Get("x-b3-flags") + } + if len(incomingReq.Header.Get("x-ot-span-context")) > 0 { + headers["x-ot-span-context"] = incomingReq.Header.Get("x-ot-span-context") + } + } + return headers +} + +//获取ip地址 +func RemoteIp(req *http.Request) string { + remoteAddr := req.RemoteAddr + if ip := req.Header.Get("X-Real-Ip"); ip != "" { + remoteAddr = ip + } else if ip = req.Header.Get("X-Forwarded-For"); ip != "" { + remoteAddr = ip + } else { + remoteAddr, _, _ = net.SplitHostPort(remoteAddr) + } + + if remoteAddr == "::1" { + remoteAddr = "127.0.0.1" + } + return remoteAddr +} + +//获取mac地址 +func GetMac() (macAddrs string) { + netInterfaces, err := net.Interfaces() + if err != nil { + fmt.Printf("fail to get net interfaces: %v", err) + return macAddrs + } + for _, netInterface := range netInterfaces { + macAddr := netInterface.HardwareAddr.String() + if len(macAddr) == 0 { + continue + } + macAddrs += macAddr + ";" + } + rs := []rune(macAddrs) + macAddrs = string(rs[:len(rs)-1]) + return macAddrs +} -- 2.26.0