Files
AI-CS/backend/utils/request.go
T
2025-11-17 18:05:00 +08:00

60 lines
1.3 KiB
Go

package utils
import (
"strings"
"github.com/gin-gonic/gin"
)
// GetClientIP 获取客户端 IP 地址(考虑代理情况)
func GetClientIP(c *gin.Context) string {
// 优先从 X-Forwarded-For 获取(适用于代理/负载均衡)
ip := strings.TrimSpace(c.GetHeader("X-Forwarded-For"))
if ip != "" {
return ip
}
// 从 X-Real-IP 获取
ip = strings.TrimSpace(c.GetHeader("X-Real-IP"))
if ip != "" {
return ip
}
return c.ClientIP()
}
// ParseUserAgent 从 User-Agent 字符串中解析浏览器和操作系统
func ParseUserAgent(userAgent string) (browser string, os string) {
browser = "Unknown"
os = "Unknown"
ua := strings.ToLower(userAgent)
if ua == "" {
return
}
switch {
case strings.Contains(ua, "edg/"):
browser = "Edge"
case strings.Contains(ua, "chrome/"):
browser = "Chrome"
case strings.Contains(ua, "firefox/"):
browser = "Firefox"
case strings.Contains(ua, "safari/"):
browser = "Safari"
}
switch {
case strings.Contains(ua, "windows nt"):
os = "Windows"
case strings.Contains(ua, "mac os x") || strings.Contains(ua, "macintosh"):
os = "macOS"
case strings.Contains(ua, "android"):
os = "Android"
case strings.Contains(ua, "iphone") || strings.Contains(ua, "ipad"):
os = "iOS"
case strings.Contains(ua, "linux"):
os = "Linux"
}
return
}