1340691923@qq.com 742458ee1d 优化代码
2022-03-16 16:04:29 +08:00

68 lines
1.6 KiB
Go

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字符串
func WriteJSON(ctx *fasthttp.RequestCtx, v interface{}) error {
var json = jsoniter.ConfigCompatibleWithStandardLibrary
b, err := json.Marshal(v)
if err != nil {
return err
}
ctx.Response.Header.Add("Content-Type", "application/json")
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")
}