// 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 } // GetQuery 获取query参数 // // Author : go_developer@163.com<白茶清欢> // // Date : 16:03 2024/1/2 func (wh *wrapperHandle) GetQuery(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 } // 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 } 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 }