305 lines
7.1 KiB
Go
305 lines
7.1 KiB
Go
// Package request ...
|
||
//
|
||
// Description : gin ...
|
||
//
|
||
// Author : go_developer@163.com<白茶清欢>
|
||
//
|
||
// Date : 2023-12-29 15:10
|
||
package request
|
||
|
||
import (
|
||
"git.zhangdeman.cn/zhangdeman/gin/request/parse_body"
|
||
"git.zhangdeman.cn/zhangdeman/wrapper"
|
||
"github.com/gin-gonic/gin"
|
||
"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
|
||
}
|
||
contentTypeVal := strings.ToLower(ctx.ContentType())
|
||
return wrapper.TernaryOperator.String(len(contentTypeVal) > 0, wrapper.String(contentTypeVal), 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{}
|
||
if _, err := parse_body.Execute(ctx, &body); nil != err {
|
||
return map[string]any{}
|
||
}
|
||
|
||
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
|
||
}
|
||
|
||
// Copy 复制context
|
||
//
|
||
// Author : go_developer@163.com<白茶清欢>
|
||
//
|
||
// Date : 11:00 2025/2/28
|
||
//
|
||
// - ctx *gin.Context : 基于哪一个context复制context
|
||
// - isCopyContextValue bool : 是否继承父级ctx的自定义value
|
||
func (wh *wrapperHandle) Copy(ctx *gin.Context, isCopyContextValue bool, excludeKeyList []string) *gin.Context {
|
||
if nil == ctx {
|
||
return nil
|
||
}
|
||
newContext := ctx.Copy()
|
||
excludeKeyTable := map[string]bool{}
|
||
for _, excludeKey := range excludeKeyList {
|
||
excludeKeyTable[excludeKey] = true
|
||
}
|
||
if isCopyContextValue {
|
||
// 上下文设置的业务数据值也继承下来, TODO: 并发读写此处可能panic
|
||
for k, v := range newContext.Keys {
|
||
if !excludeKeyTable[k] {
|
||
// 没有指定不继承
|
||
ctx.Set(k, v)
|
||
}
|
||
}
|
||
}
|
||
// 设置父级context
|
||
ctx.Set("parent_context", ctx)
|
||
if nil == ctx.Value("root_context") {
|
||
ctx.Set("root_context", ctx)
|
||
}
|
||
return newContext
|
||
}
|