有没有办法从用户访问网站的位置获取国家/地区名称?

时间:2012-10-31 10:32:54

标签: java

我有一个要求,我需要将用户的国家/地区存储在数据库中。我可以保留一个复选框或组合框,但有没有办法获取国家信息而无需用户输入?有没有办法从用户访问网站的位置获取国家/地区名称?

2 个答案:

答案 0 :(得分:0)

这是IP定位器服务。请参阅示例代码和应用程​​序@ http://www.geobytes.com/iplocator.htm源代码在PHP中,您可以尝试在java中编写它。

答案 1 :(得分:0)

是的,有一种方法可以做到这一点,但您需要做一些工作。当用户访问您的网站时,您可以使用以下方式获取他/她的IP地址:

String ip = (request.getHeader("X_FORWARDED_FOR") == null ? request.getRemoteAddr() : request.getHeader("X_FORWARDED_FOR"));

然后你可以将这个ip地址转换成二进制形式:

long binIp = ipToLong(ip);

ipToLong函数是这样的:

public long ipToLong(String addr) {
    String[] addrArray = addr.split("\\.");

    return Long.parseLong(addrArray[0]) << 24 +
           Long.parseLong(addrArray[1]) << 16 +
           Long.parseLong(addrArray[2]) << 8 +
           Long.parseLong(addrArray[3]);

}

最后使用IP地址数据库查找该值所属的国家/地区。有几个提供商。我们从software77得到我们的 - 它是免费的 - 并存储在本地数据库中,每月更新一次本地数据库。

一些注意事项:

  1. 有时地址不会被设置,因此您需要有一些合理的默认值。
  2. 有时地址会被欺骗,因此不代表真实的IP地址(格式化),因此您需要进行合理的异常处理。
  3. 有时地址将来自保留范围(例如192.168 / 16),因此,您需要有一些合理的默认值。