JAVA代码优化:地址工具类(根据IP地址获取真实的物理地址)

AddressUtils类提供了一个静态方法getRealAddressByIP,用于根据IP地址查询真实的物理地址。它通过发送HTTP请求到指定的URL,并解析返回的JSON数据来获取地址信息。 

  1. 常量定义:

    • IP_URL:用于查询IP地址的URL,值为"http://whois.pconline.com.cn/ipJson.jsp"。
    • UNKNOWN:表示未知地址,值为"XX XX"。
  2. 方法getRealAddressByIP用于根据IP地址获取真实的物理地址。它接收一个字符串类型的IP地址作为参数,并返回一个字符串类型的物理地址。

    首先,判断传入的IP地址是否为内网IP地址,如果是,则返回"内网IP"。

    接着,判断配置文件中是否启用了地址查询功能(MuyuanConfig.isAddressEnabled())。

    如果启用了地址查询功能,则使用HttpUtils.sendGet()方法发送GET请求,将IP地址作为参数附加在URL后面,并设置字符编码为Constants.GBK(GBK编码)。

    如果返回的响应字符串为空,则记录错误日志并返回UNKNOWN。

    否则,使用fastjson库解析响应字符串为JSONObject对象,并从中获取省份("pro"字段)和城市("city"字段)信息。

    最后,使用String.format()方法将省份和城市信息格式化为"省份 城市"的形式,并作为真实的物理地址返回。

    package com.muyuan.common.utils.ip;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import com.alibaba.fastjson.JSONObject;
    import com.muyuan.common.config.MuyuanConfig;
    import com.muyuan.common.constant.Constants;
    import com.muyuan.common.utils.StringUtils;
    import com.muyuan.common.utils.http.HttpUtils;
    
    /**
     * 获取地址类
     * 
     * 
     */
    public class AddressUtils
    {
        private static final Logger log = LoggerFactory.getLogger(AddressUtils.class);
    
        // IP地址查询
        public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp";
    
        // 未知地址
        public static final String UNKNOWN = "XX XX";
    
        public static String getRealAddressByIP(String ip)
        {
            String address = UNKNOWN;
            // 内网不查询
            //详见文章IP查询
            if (IpUtils.internalIp(ip))
            {
                return "内网IP";
            }
            if (MuyuanConfig.isAddressEnabled())
            {
                try
                {
                    String rspStr = HttpUtils.sendGet(IP_URL, "ip=" + ip + "&json=true", Constants.GBK);
                    if (StringUtils.isEmpty(rspStr))
                    {
                        log.error("获取地理位置异常 {}", ip);
                        return UNKNOWN;
                    }
                    JSONObject obj = JSONObject.parseObject(rspStr);
                    String region = obj.getString("pro");
                    String city = obj.getString("city");
                    return String.format("%s %s", region, city);
                }
                catch (Exception e)
                {
                    log.error("获取地理位置异常 {}", ip);
                }
            }
            return address;
        }
    }
    

你可能感兴趣的:(java,tcp/ip,数据库)