java 根据ip地址获取地理位置及运营商。

本文介绍了一种使用淘宝API来根据IP地址获取所在城市及运营商信息的方法。通过调用特定的URL并解析返回的JSON数据,可以准确地定位到IP对应的地理位置和网络服务提供商。

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

1、基于淘宝API

   /**
     * 根据ip获取城市(运营商)名称
     * @param ip
     * @return
     * @throws Exception
     */
    public static String getLocationByIp(String ip){
        String city ="";
        Map data = null;
        try {
            if(ip.equals("127.0.0.1")) {
                return "本机地址";
            }
            String jsonStr = readJsonFromUrl("http://ip.taobao.com/service/getIpInfo.php?ip="+ip); //淘宝api
            if(MyUtil.isNotEmpty(jsonStr)){
                data = JSONObject.parseObject(jsonStr);
                Map dataInfo =(Map)data.get("data");
                String cityStr = (String)dataInfo.get("city");
                if(cityStr.equals("内网IP")) {
                    city =cityStr;
                }else {
                    city = cityStr +","+(String)dataInfo.get("isp");
                }
                 return city;
            }
        } catch (Exception e) {
            // TODO: handle exception
            logger.error(e.toString());
            return "未知";
        }
        return city;
    }

 

    private static String readJsonFromUrl(String url) throws Exception{
        InputStream is = null;
        BufferedReader rd = null;
        String str = "";
        try {
            is = new URL(url).openStream();
            rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
            str = readAll(rd);
        }finally {
            //关闭输入流
            if(is != null) {
                is.close();
            }
        }
        return str;
    }
    
    private static String readAll(Reader rd) throws IOException {
       StringBuilder sb = new StringBuilder();
       int cp;
       while ((cp = rd.read()) != -1) {
           sb.append((char) cp);
       }
       return sb.toString();
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值