长沙建站标协助找有为太极,谷歌搜索排名规则,安徽网站建设推荐 晨飞网络,企业网站制作哪家好在一些需求中#xff0c;服务器需要记录客户端的ip地址#xff0c;要获取ip地址#xff0c;则需要有http.Request的对象参数传入#xff0c;以下代码直接放在util中使用。
文件名#xff1a;ip_utils.go
package utilsimport (contextgithub.com/spf1…在一些需求中服务器需要记录客户端的ip地址要获取ip地址则需要有http.Request的对象参数传入以下代码直接放在util中使用。
文件名ip_utils.go
package utilsimport (contextgithub.com/spf13/castnetnet/httpstrings
)// GetClientRealIp 获取客户端的真实 IP 地址
func GetClientRealIp(r *http.Request) (string, bool) {headers : []string{X-Forwarded-For,Proxy-Client-IP,WL-Proxy-Client-IP,X-Real-Ip,}for _, header : range headers {ip : r.Header.Get(header)if ip ! {// X-Forwarded-For 可能包含多个 IP 地址用逗号分隔取第一个有效的ips : strings.Split(ip, ,)for _, ipPart : range ips {ipPart strings.TrimSpace(ipPart)if isValidIp(ipPart) {return ipPart, true}}}}// 如果没有获取到有效的 IP则返回远程地址ip, _, _ : net.SplitHostPort(r.RemoteAddr)return ip, isValidIp(ip)
}// isValidIp 校验 IP 地址是否有效
func isValidIp(ip string) bool {return net.ParseIP(ip) ! nil
}func GetHeaderAsString(ctx context.Context, key string) (string, bool) {strAny : ctx.Value(key)if strAny ! nil {strSlice : cast.ToStringSlice(strAny)if len(strSlice) 0 {return strSlice[0], true}}return , false
}还有一个需求是如果还需要获取客户端的请求路由则是
r.URL.Path