0

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

4

2 回答 2

0

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

于 2012-10-31T10:35:52.183 回答
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),因此,您需要有一些合理的默认值。
于 2012-10-31T10:38:13.383 回答