1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 引用Geoip实现由IP地址获取国家城市等信息

引用Geoip实现由IP地址获取国家城市等信息

时间:2019-03-24 10:07:49

相关推荐

引用Geoip实现由IP地址获取国家城市等信息

需求

当我们知道用户ip的情况下,需要统计用户所属的国家/省份/城市等信息。

这时可以用开源的Geoip2 避免重复造轮子。

github地址:/maxmind/GeoIP2-java

获取代码中 GeoLite2-City.mmdb 数据的官网(需要先登录注册):/en/accounts/746301/geoip/downloads

Step1: 获取mmdb数据库信息

离线获取ip信息需要数据库信息,数据库可以在官网下载。

maxmind数据库官网下载地址:/en/accounts/746301/geoip/downloads

下载之前需要先注册登录。然后找到如下图位置点击下载即可。

GeoLite2-City.mmdb附件信息:

Step2: 引pom编写工具类

pom添加如下引用(如果引用3.xx提示类错误的话,可以换成2.xx版本):

<!-- /artifact/com.maxmind.geoip2/geoip2 --><dependency><groupId>com.maxmind.geoip2</groupId><artifactId>geoip2</artifactId><version>2.16.1</version></dependency>

简单开发

public class IpUtil {private static final String ip2cityDataPath = "D:\\GeoLite2CityData\\GeoLite2-City_0726\\GeoLite2-City.mmdb";public static void main(String[] args) {String ip = "47.111.xxx.xxx";try (DatabaseReader dr = new DatabaseReader.Builder(new File(ip2cityDataPath)).build()) {final CityResponse response = dr.city(InetAddress.getByName(ip));// 获取国家信息Country country = response.getCountry();System.out.println(country.getIsoCode());// 'CN'System.out.println(country.getName()); // 'China'System.out.println(country.getNames().get("zh-CN")); // '中国'// 获取省份Subdivision subdivision = response.getMostSpecificSubdivision();System.out.println(subdivision.getName()); //ZhejiangSystem.out.println(subdivision.getIsoCode()); // ZJSystem.out.println(subdivision.getNames().get("zh-CN")); // 浙江省// 获取城市City city = response.getCity();System.out.println(city.getName()); // HangzhouPostal postal = response.getPostal();System.out.println(postal.getCode()); // 'null'System.out.println(city.getNames().get("zh-CN")); // 杭州Location location = response.getLocation();System.out.println(location.getLatitude()); // 30.2994} catch (Exception io) {io.printStackTrace();}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。