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

该博客介绍了如何利用GeoIP2-java库来获取用户的国家、省份和城市等地理位置信息。首先,需要在MaxMind官网上注册并下载GeoLite2-City.mmdb数据库。接着,在项目中引入GeoIP2的依赖,编写工具类并读取数据库文件。通过示例代码展示了如何解析IP地址并获取到对应的国家、省份和城市等详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

当我们知道用户ip的情况下,需要统计用户所属的国家/省份/城市等信息。
这时可以用开源的Geoip2 避免重复造轮子。

github地址:https://github.com/maxmind/GeoIP2-java
获取代码中 GeoLite2-City.mmdb 数据的官网(需要先登录注册):https://www.maxmind.com/en/accounts/746301/geoip/downloads

Step1: 获取mmdb数据库信息

离线获取ip信息需要数据库信息,数据库可以在官网下载。
maxmind数据库官网下载地址:https://www.maxmind.com/en/accounts/746301/geoip/downloads
下载之前需要先注册登录。然后找到如下图位置点击下载即可。
GeoLite2-City.mmdb附件信息:

在这里插入图片描述

Step2: 引pom编写工具类

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

            <!-- https://mvnrepository.com/artifact/com.maxmind.geoip2/geoip2 -->
            <dependency>
                <groupId>com.maxmind.geoip2</groupId>
                <artifactId>geoip2</artifactId>
                <version>2.16.1</version>
            </dependency>
    
  2. 简单开发

    public class IpUtil {
        private static final String ip2cityDataPath = "D:\\GeoLite2CityData\\GeoLite2-City_20220726\\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());   //Zhejiang
                System.out.println(subdivision.getIsoCode()); // ZJ
                System.out.println(subdivision.getNames().get("zh-CN")); // 浙江省
    
                // 获取城市
                City city = response.getCity();
                System.out.println(city.getName()); // Hangzhou
                Postal 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();
            }
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值