IP地址查询接口API

本文介绍了通过IP地址查询设备所在省份的方法,对比了淘宝、新浪和126三家提供的免费API服务,最终选择了新浪IPAPI。文章还提供了具体的Java实现代码。

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

项目需要根据ip查询pos机设备所在的省份信息,经查询有以下几种免费接口:

1. 淘宝IP API http://ip.taobao.com/service/getIpInfo.php?ip=xxx

2. 新浪IP API http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=xxx

3. 126IP API http://ip.ws.126.net/ipquery?ip=xxx

三种方法经过测试对比后,最终选择了新浪IP API

APIAPI格式结果优点缺点
淘宝IP APIhttp://ip.taobao.com/service/getIpInfo.php?ip=219.136.49.117根据ip可以查询到的地理信息有:国家、省、市、县、运营商,信息维度广,格式规范,精确度高,数据质量有保障。同一个ip连续查第二次时,等待时间相对比较长,一段时间内浏览器会返回request is not finished yet.可能是内部对同一用户对某一个ip访问次数存在限制。
新浪IP APIhttp://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=219.136.49.117响应迅速,返回结果快,并且返回的数据类型可以自定义格式,默认为纯文本格式,根据format的参数定制,可以返回JS、Json格式,数据准确。结果描述没带单位,比如province返回的是广东而不是广东省,返回的信息没有淘宝的全面。
126IP API 响应迅速,返回结果快。返回结果信息少,数据相对不是很准确,比如香港的ip(219.78.113.243)结果地址会返回广东。

 

引用的包:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

代码如下:

 /**
     * 根据ip返回省市信息
     *
     * @param ip  设备所在ip地址
     * @return
     */
    public static String getProvinceByIp(String ip) {
        String path = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=" + ip;
        String inputInfo = "";
        String info = "";
        try {
            URL url = new URL(path);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setReadTimeout(10 * 1000);
            connection.setRequestMethod("GET");

            InputStreamReader inputStreamReader = new InputStreamReader(connection.getInputStream(), "UTF-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            while ((inputInfo = bufferedReader.readLine()) != null) {
                info += inputInfo;
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        JSONObject jsonObject = JSONObject.parseObject(info);
        String province = jsonObject.get("province").toString();
        switch (province) {
            case "香港":
            case "澳门":
                province += province + "特别行政区";
                break;
            case "北京":
            case "上海":
            case "天津":
            case "重庆":
                province += "市";
                break;
            case "内蒙古":
            case "西藏":
                province += "自治区";
                break;
            case "新疆":
                province += "维吾尔自治区";
                break;
            case "宁夏":
                province += "回族自治区";
                break;
            case "广西":
                province += "壮族自治区";
                break;
            default:
                province += "省";
                break;
        }
        return province;
    }

 

转载于:https://www.cnblogs.com/miaoying/p/7410502.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值