1

httpリクエストからIPアドレスを取得する機能を備えたジオコーダーgemを使用しています。ドキュメントから:

Geocoder adds a +location+ method to the standard <tt>Rack::Request</tt> object so you can easily look up the location of any HTTP request by IP address. For example, in a Rails controller or a Sinatra app:

 # returns Geocoder::Result object
  result = request.location

置いた

@result = request.location

私のコントローラーでそして私の見解で

<%= @result %>

しかし、私はこれを手に入れました。

#<Geocoder::Result::Freegeoip:0x00000102dc7758>

それから私は試しました

<%= @result.to_s %>

しかし、それは何も変わりませんでした。

何か案は?

4

2 に答える 2

3

クライアントの IP を取得するには、 を使用しますrequest.ip特にユーザーがプロキシの背後にいる場合は、IP を取得するより正しい方法です。したがって、次のように簡単です。

 request.ip

そのソースは次のとおりです。

 # File lib/rack/request.rb, line 256
 def ip
   if addr = @env['HTTP_X_FORWARDED_FOR']
     (addr.split(',').grep(/\d\./).first || @env['REMOTE_ADDR']).to_s.strip
   else
     @env['REMOTE_ADDR']
   end
 end
于 2012-04-28T05:05:17.617 に答える
0

必要なものが IP アドレスだけの場合は、リクエスト ヘッダーから取得できます。なりすましのために完全に正確ではないかもしれませんが、いくつかのヘッダー値をざっと見てみると、REMOTE_ADDR に私のものが含まれていることがわかりました。これをコントローラに入れるだけです。他の誰かが使用する他の値またはより良い値を推奨できる場合は、お知らせください。

request.headers['REMOTE_ADDR']

実際に HTTP_X_FORWARDED_FOR をチェックしてみましたが、ヘッダーに存在しませんでした。おそらくwebrickはそれを使用していません。

于 2012-04-28T03:54:21.390 に答える