java根据ip地址获取用户地理位置
功能需求
工作项目需要,根据用户向服务器请求的ip地址获取用户所在的地理位置。
具体代码
话不多说,直接上代码(作为一个负责任的程序员,我把import内容都贴贴出来了):
如何调用
// 测试 public static void main(String[] args) throws Exception { AddressUtils addressUtils = new AddressUtils(); String ip = "222.221.10.111"; String address = ""; try { address = addressUtils.getAddresses("ip=" + ip, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } JSONObject jsonObject = new JSONObject(address); jsonObject = jsonObject.getJSONObject("data"); //通过相应的get方法,获取相应的属性 String county = jsonObject.getString("country_id");//国家 String region = jsonObject.getString("region");//省份 String city = jsonObject.getString("city");//城市 String telecom = jsonObject.getString("isp");//运营商 System.out.println("获取的地址为:" + address); System.out.println("解析得到的地址为:" +county+","+ region + "省;" + city + "市,"+telecom); }
效果图
注意事项
案例中使用的解析地址是淘宝的,也提供了一个新浪的,这些都是免费的api。但是,我说但是了啊,这些免费的api使用起来有一个bug;那就是:如果你频繁调用这个接口,会出现502,调用失败的显现。那么,如何解决这个问题呢?好说,充钱。没错,就是充钱购买比如阿里云提供的一个这样的工具,收费的; 当然,除了充钱,也还有第二个解决方案。在说第二种解决方案之前,我们先来了解一下上面的第一种解决方案的思路:
实现思路
将全球申请的ip地址信息收集起来,做成一个数据库系统,存入服务器端。当需要使用查询的时候,直接使用IP地址和数据库系统中的数据进行对比(因为ip地址在全球都是唯一的,在存入数据库之前,会将IP地址转为一个二进制数字然后进行存储,需要查询的时候也同样是将提供IP地址转为一个二进制数字再进行查询)。
第二种解决方案
在大致了解了这个功能的实现过程以后,我们对于第二种解决方案应该也成竹在胸了。没错,那就是我们自己下载ip地址信息,存储在本地,需要使用的时候,直接在本地查询对比即可。 那么,这个IP地址信息去哪里下载呢?以下是下载地址: 具体的编写流程由于时间等原因,本次就不做介绍了。下回有时间再来唠叨唠叨