ip2region解析ip获取地区

获取http请求ip,看上篇博客

pom
<dependency>
            <groupId>org.lionsoul</groupId>
            <artifactId>ip2region</artifactId>
            <version>1.7.2</version>
        </dependency>
java
import org.lionsoul.ip2region.DataBlock;
import org.lionsoul.ip2region.DbConfig;
import org.lionsoul.ip2region.DbSearcher;
import org.lionsoul.ip2region.Util;

import java.io.File;
import java.lang.reflect.Method;


public class IpUtil {

    public static String getCityInfo(String ip) {
//        db文件下载地址,https://gitee.com/lionsoul/ip2region/tree/master/data 下载下来后解压,db文件在data目录下

        String dbPath ="D:\\workstation\\ip2region\\data\\ip2region.db";
        File file = new File(dbPath);
        if (file.exists() == false) {
            System.out.println("Error: Invalid ip2region.db file");
        }
        //查询算法 B-tree
        int algorithm = DbSearcher.BTREE_ALGORITHM;
        try {
            DbConfig config = new DbConfig();
            DbSearcher searcher = new DbSearcher(config, dbPath);
            Method method = null;
            switch (algorithm) {
                case DbSearcher.BTREE_ALGORITHM:
                    method = searcher.getClass().getMethod("btreeSearch", String.class);
                    break;
                case DbSearcher.BINARY_ALGORITHM:
                    method = searcher.getClass().getMethod("binarySearch", String.class);
                    break;
                case DbSearcher.MEMORY_ALGORITYM:
                    method = searcher.getClass().getMethod("memorySearch", String.class);
                    break;
                default:
                    break;
            }
            if (Util.isIpAddress(ip) == false) {
                System.out.println("Error: Invalid ip address");
            }
            DataBlock dataBlock = (DataBlock) method.invoke(searcher, ip);
            return dataBlock.getRegion();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "Error: getCityInfo error";
    }
}
封装
上述获取的格式是 国家|编号|省份|城市|运营商
实体类
@Data
public class RegionDetail {
    private Integer id;
    private String realIp;
    private String countNum;
    private String country;
    private String province;
    private String city;
    private String operator;

}
使用
/**
     * <p>
     * 解析ip
     * </p>
     *
     * @author jatham 2021/03/01 13:55
     */
    private RegionDetail analysisAddress(String ip) {
    
        String ipInfo = IpUtil.getCityInfo(ip);
        //国家|大区|省份|城市|运营商
        String[] splitIpString = ipInfo.split("\\|");

        RegionDetail regionDetail = new RegionDetail();
        regionDetail.setRealIp(ip);
        regionDetail.setCountry(StringUtils.isNoneBlank(splitIpString[0]) ? splitIpString[0] : "");

        regionDetail.setProvince(StringUtils.isNoneBlank(splitIpString[2]) ? splitIpString[2] : "");
        regionDetail.setCity(StringUtils.isNoneBlank(splitIpString[3]) ? splitIpString[3] : "");
        regionDetail.setOperator(StringUtils.isNoneBlank(splitIpString[4]) ? splitIpString[4] : "");
        return regionDetail;

    }

博主公众号
求关注
在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值