2022-01-26 16:40:50 +08:00
|
|
|
package util
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"io/ioutil"
|
|
|
|
"net/http"
|
|
|
|
"regexp"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
. "github.com/gofiber/fiber/v2"
|
|
|
|
jsoniter "github.com/json-iterator/go"
|
|
|
|
"github.com/valyala/fasthttp"
|
|
|
|
)
|
|
|
|
|
|
|
|
//获取真实的IP 1.1.1.1, 2.2.2.2, 3.3.3.3
|
|
|
|
func CtxClientIP(ctx *fasthttp.RequestCtx) string {
|
|
|
|
clientIP := Bytes2str(ctx.Request.Header.Peek("X-Forwarded-For"))
|
|
|
|
if index := strings.IndexByte(clientIP, ','); index >= 0 {
|
|
|
|
clientIP = clientIP[0:index]
|
|
|
|
//获取最开始的一个 即 1.1.1.1
|
|
|
|
}
|
|
|
|
clientIP = strings.TrimSpace(clientIP)
|
|
|
|
if len(clientIP) > 0 {
|
|
|
|
return clientIP
|
|
|
|
}
|
|
|
|
clientIP = strings.TrimSpace(Bytes2str(ctx.Request.Header.Peek("X-Real-Ip")))
|
|
|
|
if len(clientIP) > 0 {
|
|
|
|
return clientIP
|
|
|
|
}
|
|
|
|
return ctx.RemoteIP().String()
|
|
|
|
}
|
|
|
|
|
|
|
|
// PostJSON POST请求 BODY为JSON格式 ContentType=application/json
|
|
|
|
func PostJSON(URL string, v interface{}) ([]byte, error) {
|
|
|
|
var json = jsoniter.ConfigCompatibleWithStandardLibrary
|
|
|
|
b, err := json.Marshal(v)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
resp, err := http.Post(URL, "application/json", bytes.NewReader(b))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
defer resp.Body.Close()
|
|
|
|
|
|
|
|
return ioutil.ReadAll(resp.Body)
|
|
|
|
}
|
|
|
|
|
|
|
|
// WriteJSON 写入json字符串
|
2022-03-16 16:04:29 +08:00
|
|
|
func WriteJSON(ctx *fasthttp.RequestCtx, v interface{}) error {
|
2022-01-26 16:40:50 +08:00
|
|
|
var json = jsoniter.ConfigCompatibleWithStandardLibrary
|
|
|
|
b, err := json.Marshal(v)
|
|
|
|
if err != nil {
|
2022-03-16 16:04:29 +08:00
|
|
|
return err
|
2022-01-26 16:40:50 +08:00
|
|
|
}
|
2022-03-01 17:33:48 +08:00
|
|
|
ctx.Response.Header.Add("Content-Type", "application/json")
|
2022-01-26 16:40:50 +08:00
|
|
|
ctx.Response.SetBody(b)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
var regIPv4 = regexp.MustCompile(
|
|
|
|
`^(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))$`,
|
|
|
|
)
|
|
|
|
|
|
|
|
func GetToken(ctx *Ctx) (token string) {
|
|
|
|
return ctx.Get("X-Token")
|
|
|
|
}
|