gin/request/wrapper.go

293 lines
6.8 KiB
Go
Raw Normal View History

2024-07-23 17:09:29 +08:00
// Package request ...
2023-12-29 15:29:37 +08:00
//
// Description : gin ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2023-12-29 15:10
package request
import (
2024-07-26 11:50:42 +08:00
"bytes"
"git.zhangdeman.cn/zhangdeman/consts"
2023-12-29 15:29:37 +08:00
"git.zhangdeman.cn/zhangdeman/wrapper"
"github.com/gin-gonic/gin"
2024-07-26 11:50:42 +08:00
"io"
2023-12-29 15:29:37 +08:00
"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
}
2024-01-02 16:16:42 +08:00
// 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
}
2024-01-02 16:04:17 +08:00
// GetQuery 获取query参数
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:03 2024/1/2
2024-07-26 11:50:42 +08:00
func (wh *wrapperHandle) GetQuery(ctx *gin.Context) map[string]string {
query := make(map[string]string)
2024-01-02 16:04:17 +08:00
if nil != ctx && nil != ctx.Request && nil != ctx.Request.URL {
2024-07-26 11:52:53 +08:00
for paramName, valueList := range ctx.Request.URL.Query() {
2024-07-26 11:50:42 +08:00
if len(valueList) == 0 {
query[paramName] = ""
} else {
query[paramName] = valueList[0]
}
}
return query
2024-01-02 16:04:17 +08:00
}
2024-07-26 11:50:42 +08:00
return query
2024-01-02 16:04:17 +08:00
}
2024-01-02 15:20:08 +08:00
// 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 ""
}
2023-12-29 15:29:37 +08:00
// 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()
}
2023-12-29 15:35:46 +08:00
2024-09-19 15:13:25 +08:00
// 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
}
2024-07-26 11:50:42 +08:00
// GetRequestBody 获取请求body
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 11:25 2024/7/26
func (wh *wrapperHandle) GetRequestBody(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
}
2024-07-26 11:52:53 +08:00
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
}
2024-07-26 11:50:42 +08:00
return body
}
2024-01-02 15:20:08 +08:00
// 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
}
2023-12-29 15:35:46 +08:00
}
2024-07-23 16:40:13 +08:00
// 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)
}
2024-09-23 17:06:49 +08:00
// 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
}