【问题标题】:Need country name from the request or with ip_address需要来自请求的国家名称或带有 ip_address
【发布时间】:2014-03-05 05:58:54
【问题描述】:

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

通过下面一行我们可以得到请求的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 地址目前在印度,它给了我国家名称“保留”

任何帮助都会不胜感激

【问题讨论】:

  • 这里您使用的是 C 类 IP 地址,LAN ip 地址,因此它可能会给出保留的国家代码
  • 那么我应该给什么你能建议我得到正确的国家名称。

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


【解决方案1】:

我不是 Ruby 程序员,而是 PHP。但我怀疑 Ruby 是否有一种与生俱来的方式来了解 IP 地址所在的国家/地区。从这样的站点尝试 API:http://www.geobytes.com/IpLocator.htm

【讨论】:

    【解决方案2】:

    使用geoipgem,

    访问此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" 
    

    【讨论】:

    • 是的,我已经尝试过了,但它让我在您的 PC 中找不到 .dat 文件。
    • 使用这个语言环境 = Timeout::timeout(5) { Net::HTTP.get_response(URI.parse('api.hostip.info/country.php?ip=' + request.remote_ip )).body } 拯救“美国”它当我使用我的 IP 地址时重新输入“IN”
    • 你可以知道你的IP地址,它可能以122.xxx.xxx.xxx开头,用那个
    • 我使用了我的 IP 并在响应中得到了“IN” 1.9.2-p320 :005 > locale = Timeout::timeout(5) { Net::HTTP.get_response(URI.parse('@ 987654323@' + '124.xxx.xxx.xxx' )).body } 救援 "US" => "IN"
    • 连接被拒绝 - connect(2)
    【解决方案3】:

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

    Retreive the geolocation of an IP address using Ruby

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 2011-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 2020-12-05
      相关资源
      最近更新 更多