13

ReCAPTCHA を GAE Golang Web アプリケーションに統合したいと考えています。キャプチャを確認するには、ユーザーの IP アドレスを取得する必要があります。フォーム投稿からユーザーの IP アドレスを取得するにはどうすればよいですか?

4

4 に答える 4

49

net.SplitHostPortを使用します。

ip, _, _ := net.SplitHostPort(r.RemoteAddr)
于 2014-02-06T22:20:56.360 に答える
26

ハンドラー関数内で r.RemoteAddr を呼び出して ip:port を受け取ります

このような:

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

}

@Aigars Matulisが指摘したように2017年2月15日更新、現在のバージョンではこれを行う機能がすでにあります

ip, _, _ := net.SplitHostPort(r.RemoteAddr)
于 2013-06-20T19:31:25.750 に答える
26

上記の回答は、ユーザーの 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
}
于 2014-10-06T19:48:36.500 に答える