293 lines
6.8 KiB
Go
293 lines
6.8 KiB
Go
// Package request ...
|
|
//
|
|
// Description : gin ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2023-12-29 15:10
|
|
package request
|
|
|
|
import (
|
|
"bytes"
|
|
"git.zhangdeman.cn/zhangdeman/consts"
|
|
"git.zhangdeman.cn/zhangdeman/wrapper"
|
|
"github.com/gin-gonic/gin"
|
|
"io"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
WrapperHandle = &wrapperHandle{}
|
|
)
|
|
|
|
type wrapperHandle struct {
|
|
}
|
|
|
|
// GetHeader 读取header
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 21:22 2023/12/25
|
|
func (wh *wrapperHandle) GetHeader(ctx *gin.Context, headerKey string, defaultVal string) string {
|
|
if nil == ctx {
|
|
return defaultVal
|
|
}
|
|
val := ctx.GetHeader(headerKey)
|
|
return wrapper.TernaryOperator.String(len(val) > 0, wrapper.String(val), wrapper.String(defaultVal)).Value()
|
|
}
|
|
|
|
// GetCookie 读取cookie
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 21:23 2023/12/25
|
|
func (wh *wrapperHandle) GetCookie(ctx *gin.Context, cookieName string, defaultVal string) string {
|
|
if nil == ctx {
|
|
return ""
|
|
}
|
|
val, err := ctx.Cookie(cookieName)
|
|
if nil != err {
|
|
return defaultVal
|
|
}
|
|
return wrapper.TernaryOperator.String(len(val) > 0, wrapper.String(val), wrapper.String(defaultVal)).Value()
|
|
}
|
|
|
|
// GetUri 获取请求URI
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 15:13 2023/12/29
|
|
func (wh *wrapperHandle) GetUri(ctx *gin.Context, defaultVal string) string {
|
|
if nil != ctx && nil != ctx.Request && nil != ctx.Request.URL {
|
|
return ctx.Request.URL.Path
|
|
}
|
|
return defaultVal
|
|
}
|
|
|
|
// GetScheme 获取scheme
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 16:16 2024/1/2
|
|
func (wh *wrapperHandle) GetScheme(ctx *gin.Context, defaultVal string) string {
|
|
if nil != ctx && nil != ctx.Request && nil != ctx.Request.URL {
|
|
return ctx.Request.URL.Scheme
|
|
}
|
|
return defaultVal
|
|
}
|
|
|
|
// ParseQuery 获取query参数
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 16:03 2024/1/2
|
|
func (wh *wrapperHandle) ParseQuery(ctx *gin.Context) map[string]string {
|
|
query := make(map[string]string)
|
|
if nil != ctx && nil != ctx.Request && nil != ctx.Request.URL {
|
|
for paramName, valueList := range ctx.Request.URL.Query() {
|
|
if len(valueList) == 0 {
|
|
query[paramName] = ""
|
|
} else {
|
|
query[paramName] = valueList[0]
|
|
}
|
|
}
|
|
return query
|
|
}
|
|
return query
|
|
}
|
|
|
|
// GetMethod 获取请求方法
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 15:19 2024/1/2
|
|
func (wh *wrapperHandle) GetMethod(ctx *gin.Context) string {
|
|
if nil != ctx && nil != ctx.Request {
|
|
return ctx.Request.Method
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// GetContentType 获取请求方式
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 15:24 2023/12/29
|
|
func (wh *wrapperHandle) GetContentType(ctx *gin.Context, defaultVal string) string {
|
|
if nil == ctx {
|
|
return defaultVal
|
|
}
|
|
contentType := strings.ToLower(ctx.ContentType())
|
|
return wrapper.TernaryOperator.String(len(contentType) > 0, wrapper.String(contentType), wrapper.String(defaultVal)).Value()
|
|
}
|
|
|
|
// GetDomain 获取请求Domain
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 15:12 2024/9/19
|
|
func (wh *wrapperHandle) GetDomain(ctx *gin.Context) string {
|
|
if nil == ctx {
|
|
return ""
|
|
}
|
|
return ctx.Request.Host
|
|
}
|
|
|
|
// ParseBody 获取请求body
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 11:25 2024/7/26
|
|
func (wh *wrapperHandle) ParseBody(ctx *gin.Context) map[string]any {
|
|
body := map[string]any{}
|
|
contentType := wh.GetContentType(ctx, "")
|
|
if strings.Contains(contentType, consts.MimeTypeXWWWFormUrlencoded) { // form请求
|
|
if err := ctx.Request.ParseForm(); nil != err {
|
|
return body
|
|
}
|
|
for paramName, itemParam := range ctx.Request.PostForm {
|
|
if len(itemParam) > 0 {
|
|
body[paramName] = itemParam[0]
|
|
} else {
|
|
body[paramName] = ""
|
|
}
|
|
}
|
|
return body
|
|
}
|
|
|
|
if strings.Contains(contentType, consts.MimeTypeJson) || nil != ctx.Request.Body { // json请求 或者非 json请求 存在 body
|
|
data, err := io.ReadAll(ctx.Request.Body)
|
|
if nil != err {
|
|
return body
|
|
}
|
|
ctx.Request.Body = io.NopCloser(bytes.NewBuffer(data))
|
|
return body
|
|
}
|
|
|
|
return body
|
|
}
|
|
|
|
// GetResponseBody 获取响应body
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 15:18 2024/1/2
|
|
func (wh *wrapperHandle) GetResponseBody(ctx *gin.Context, key string, defaultVal any) any {
|
|
if nil == ctx {
|
|
return defaultVal
|
|
}
|
|
if val, exist := ctx.Get(key); !exist || nil == val {
|
|
return defaultVal
|
|
} else {
|
|
return val
|
|
}
|
|
}
|
|
|
|
// GetClientIp 获取请求客户端IP
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 16:31 2024/7/23
|
|
func (wh *wrapperHandle) GetClientIp(ctx *gin.Context, defaultVal string) string {
|
|
if nil == ctx {
|
|
return defaultVal
|
|
}
|
|
return ctx.ClientIP()
|
|
}
|
|
|
|
// GetUserAgent 获取user_agent
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 16:32 2024/7/23
|
|
func (wh *wrapperHandle) GetUserAgent(ctx *gin.Context, defaultVal string) string {
|
|
if nil == ctx {
|
|
return defaultVal
|
|
}
|
|
return ctx.Request.UserAgent()
|
|
}
|
|
|
|
// GetCtxData 获取请求上下文数据
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 16:35 2024/7/23
|
|
func (wh *wrapperHandle) GetCtxData(ctx *gin.Context, key string, defaultVal any) any {
|
|
if nil == ctx {
|
|
return defaultVal
|
|
}
|
|
if val, exist := ctx.Get(key); !exist || nil == val {
|
|
return defaultVal
|
|
} else {
|
|
return val
|
|
}
|
|
}
|
|
|
|
// GetCtxStringData 获取字符串数据
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 16:37 2024/7/23
|
|
func (wh *wrapperHandle) GetCtxStringData(ctx *gin.Context, key string, defaultVal string) string {
|
|
if nil == ctx {
|
|
return defaultVal
|
|
}
|
|
val := ctx.GetString(key)
|
|
if len(val) == 0 {
|
|
return defaultVal
|
|
}
|
|
return val
|
|
}
|
|
|
|
// GetCtxIntData 获取int数据
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 16:39 2024/7/23
|
|
func (wh *wrapperHandle) GetCtxIntData(ctx *gin.Context, key string, defaultVal int64) int64 {
|
|
if nil == ctx {
|
|
return defaultVal
|
|
}
|
|
val := wh.GetCtxData(ctx, key, nil)
|
|
if nil == val {
|
|
return defaultVal
|
|
}
|
|
return ctx.GetInt64(key)
|
|
}
|
|
|
|
// ParseHeader 解析header数据
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 17:04 2024/9/23
|
|
func (wh *wrapperHandle) ParseHeader(ctx *gin.Context) map[string]string {
|
|
headerData := map[string]string{}
|
|
if nil == ctx || nil == ctx.Request {
|
|
return headerData
|
|
}
|
|
for headerName, headerVal := range ctx.Request.Header {
|
|
if len(headerVal) > 0 {
|
|
headerData[headerName] = headerVal[0]
|
|
} else {
|
|
headerData[headerName] = ""
|
|
}
|
|
}
|
|
return headerData
|
|
}
|
|
|
|
// ParseCookie 解析cookie数据
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 17:06 2024/9/23
|
|
func (wh *wrapperHandle) ParseCookie(ctx *gin.Context) map[string]string {
|
|
cookieData := map[string]string{}
|
|
if nil == ctx || nil == ctx.Request {
|
|
return cookieData
|
|
}
|
|
for _, itemCookie := range ctx.Request.Cookies() {
|
|
cookieData[itemCookie.Name] = itemCookie.Value
|
|
}
|
|
return cookieData
|
|
}
|