需要来自请求的国家/地区名称或ip_address

时间:2014-03-05 05:58:55

标签: ruby-on-rails ruby ruby-on-rails-3 ip ip-address

我已经搜索了堆栈溢出但没有找到任何与之相关的答案。

通过以下行,我们可以获得请求的IP地址。

request.remote_ip 

它对ip地址工作正常,并给我正确的远程机器的IP地址。

但是对于位置而言,它并没有给我正确的位置。

request.location

使用上面的行,我得到的数据如下所示

#<Geocoder::Result::Freegeoip:0xb47eae8c @data={"ip"=>"192.168.1.183", "country_code"=>"RD", "country_name"=>"Reserved", "region_code"=>"", "region_name"=>"", "city"=>"", "zipcode"=>"", "latitude"=>0, "longitude"=>0, "metro_code"=>"", "areacode"=>""}, @cache_hit=nil>

但是IP地址目前在印度,它给我的国家名称为“保留”

任何一个帮助都会肆无忌惮地欣赏

3 个答案:

答案 0 :(得分:1)

我不是Ruby程序员,而是PHP。但我怀疑Ruby有一种天生的方式来了解IP地址所在的国家/地区。从以下网站试用API:http://www.geobytes.com/IpLocator.htm

答案 1 :(得分:1)

使用geoip gem,

访问此SO以获取更详尽的答案。

如果您不想使用gem,请使用以下简单代码: -

require 'net/http'

 locale = Timeout::timeout(5) { Net::HTTP.get_response(URI.parse('api.hostip.info/country.php?ip='; + request.remote_ip )).body } rescue "US" 

答案 2 :(得分:1)

好的,这是您可以参考的示例代码。

Retreive the geolocation of an IP address using Ruby