44 lines
752 B
Go
44 lines
752 B
Go
package middleware
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
// getClientIP 获取客户端IP
|
|
func getClientIP(r *http.Request) string {
|
|
// X-Forwarded-For
|
|
xff := r.Header.Get("X-Forwarded-For")
|
|
if xff != "" {
|
|
ips := strings.Split(xff, ",")
|
|
if len(ips) > 0 {
|
|
return strings.TrimSpace(ips[0])
|
|
}
|
|
}
|
|
|
|
// X-Real-IP
|
|
xri := r.Header.Get("X-Real-IP")
|
|
if xri != "" {
|
|
return xri
|
|
}
|
|
|
|
// RemoteAddr
|
|
ip := r.RemoteAddr
|
|
if idx := strings.LastIndex(ip, ":"); idx != -1 {
|
|
ip = ip[:idx]
|
|
}
|
|
return ip
|
|
}
|
|
|
|
// parseQuery 解析query参数
|
|
func parseQuery(query string) map[string]string {
|
|
m := make(map[string]string)
|
|
for _, v := range strings.Split(query, "&") {
|
|
kv := strings.Split(v, "=")
|
|
if len(kv) == 2 {
|
|
m[kv[0]] = kv[1]
|
|
}
|
|
}
|
|
return m
|
|
}
|