Google App Engine Golang - 如何获取用户的IP地址?

The*_*chu 13 ip google-app-engine go recaptcha

我想将ReCAPTCHA集成到我的GAE Golang Web应用程序中.为了验证验证码,我需要获取用户的IP地址.如何从表单发布中获取用户的IP地址?

Aig*_*lis 48

使用net.SplitHostPort:

ip, _, _ := net.SplitHostPort(r.RemoteAddr)
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记`import"net"` (3认同)

fmt*_*MKO 26

在你的处理函数里面调用r.RemoteAddr来接收ip:port

像这样:

func renderIndexPage(w http.ResponseWriter, r *http.Request) {
  ip := strings.Split(r.RemoteAddr,":")[0] 

}
Run Code Online (Sandbox Code Playgroud)

更新时间:02/15/2017 @Aigars Matulis指出,在当前版本中已经有了一个功能

ip, _, _ := net.SplitHostPort(r.RemoteAddr)
Run Code Online (Sandbox Code Playgroud)


orc*_*man 24

上面的答案忽略了检查用户的IP是否由代理转发.在很多情况下,你会在RemoteAddr中找到的IP是代理的IP,它将用户的请求转发给你 - 而不是用户的IP地址!

更准确的解决方案如下所示:

package main

import (
    "net"
    "net/http"
)

func GetIP(r *http.Request) string {
    if ipProxy := r.Header.Get("X-FORWARDED-FOR"); len(ipProxy) > 0 {
        return ipProxy
    }
    ip, _, _ := net.SplitHostPort(r.RemoteAddr)
    return ip
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案表明X-Forwarded-For可以列出:http://stackoverflow.com/a/27235620/214070 (4认同)