• IP地址查询接口API


    项目需要根据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

    API API格式 结果 优点 缺点
    淘宝IP API http://ip.taobao.com/service/getIpInfo.php?ip=219.136.49.117 根据ip可以查询到的地理信息有:国家、省、市、县、运营商,信息维度广,格式规范,精确度高,数据质量有保障。 同一个ip连续查第二次时,等待时间相对比较长,一段时间内浏览器会返回request is not finished yet.可能是内部对同一用户对某一个ip访问次数存在限制。
    新浪IP API http://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;
        }
  • 相关阅读:
    LightOJ 1422 Halloween Costumes(区间dp)
    zoj 3537 Cake(区间dp)
    POJ 2955 Brackets(区间dp)
    HDU 1058 Humble Numbers(dp)
    uva 10934 Dropping water balloons(转载)
    树形dp
    Manacher算法求回文半径
    poj-1236.network of schools(强连通分量 + 图的入度出度)
    hdu-2255.奔小康赚大钱(最大权二分匹配)
    poj-2289.jamies contact groups(二分答案 + 二分多重匹配)
  • 原文地址:https://www.cnblogs.com/miaoying/p/7410502.html
Copyright © 2020-2023  润新知