Java获取ip归属地(省、市)

1、添加依赖

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.3</version>
</dependency>

2、工具类代码

package com.shucha.deveiface.biz.test;


/**
 * @author tqf
 * @Description 根据ip获取归属地
 * @Version 1.0
 * @since 2022-05-27 10:11
 */

import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.itextpdf.text.log.Logger;
import com.itextpdf.text.log.LoggerFactory;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
public class iptes {
    private static Logger logger = LoggerFactory.getLogger(iptes.class);

    /**
     * 获取IP地址
     *
     * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
     * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
     */
    public static String getIpAddr(HttpServletRequest request) {
        String ip = null;
        try {
            ip = request.getHeader("x-forwarded-for");
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
        } catch (Exception e) {
            logger.error("IPUtils ERROR ", e);
        }

        //使用代理,则获取第一个IP地址
        if(StringUtils.isEmpty(ip) ) {
            if(ip.indexOf(",") > 0) {
                ip = ip.substring(0, ip.indexOf(","));
            }
        }

        return ip;
    }

    /**
     * 根据ip获取归属地
     * @param ip
     * @return
     */
    public static IpAddress getAddress(String ip) {
        String url = "http://ip.ws.126.net/ipquery?ip=" + ip;
        String str = HttpUtil.get(url);
        if(!StrUtil.hasBlank(str)){
            String substring = str.substring(str.indexOf("{"), str.indexOf("}")+1);
            JSONObject jsonObject = JSON.parseObject(substring);
            String province = jsonObject.getString("province");
            String city = jsonObject.getString("city");
            IpAddress ipAddress = new IpAddress();
            ipAddress.setProvince(province);
            ipAddress.setCity(city);
            System.out.println("ip:"+ ip + ",省份:" + province + ",城市:" + city);
            return ipAddress;
        }
        return null;
    }

    @Data
    public static class IpAddress{
        private String province;
        private String city;
    }

    public static void main(String[] args) {
        System.out.println(getAddress("36.25.225.250"));
    }

}

3、测试结果

测试ip:36.25.225.250

返回数据:ip:36.25.225.250,省份:浙江省,城市:湖州市
                  iptes.IpAddress(province=浙江省, city=湖州市)

posted @ 2022-08-04 19:11  码奴生来只知道前进~  阅读(863)  评论(0编辑  收藏  举报