1. 程式人生 > >獲取IP地址的詳細信息——Java

獲取IP地址的詳細信息——Java

his lib rgs ace port finally NPU java.net try

代碼


import com.alibaba.fastjson.JSON;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

/**
 * 根據IP地址獲取詳細的地域信息
 *
 * @author Yawei Xi
 * @date 2018-10-13
 */
public class IPUtil {

    private static final String IP_URL = "http://ip.taobao.com/service/getIpInfo.php";

    public static Ip getIpDataByIp(String ip) {
        String data = sendGet(IP_URL + "?ip=" + ip);
        if (null == data) {
            return null;
        }
        Result result = JSON.parseObject(data, Result.class);
        if (null == result || result.getCode() != 0) {
            return null;
        }
        return result.getData();
    }

    /**
     * 向指定URL發送GET方法的請求
     *
     * @param url 發送請求的URL
     * @return URL 所代表遠程資源的響應結果
     */
    public static String sendGet(String url) {
        String result = "";
        BufferedReader in = null;
        try {
            String urlNameString = url;
            URL realUrl = new URL(urlNameString);
            // 打開和URL之間的連接
            URLConnection connection = realUrl.openConnection();
            // 設置通用的請求屬性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立實際的連接
            connection.connect();
            // 獲取所有響應頭字段
            // Map<String, List<String>> map = connection.getHeaderFields();
            // 遍歷所有的響應頭字段
            /*for (String key : map.keySet()) {
                System.out.println(key + "--->" + map.get(key));
            }  */
            // 定義 BufferedReader輸入流來讀取URL的響應
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream())); //這裏如果出現亂碼,請使用帶編碼的InputStreamReader構造方法,將需要的編碼設置進去</span>
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("發送GET請求出現異常!" + e);
            e.printStackTrace();
        }
        // 使用finally塊來關閉輸入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }

    public static class Result {
        private Integer code;
        private Ip data;

        public Integer getCode() {
            return code;
        }

        public void setCode(Integer code) {
            this.code = code;
        }

        public Ip getData() {
            return data;
        }

        public void setData(Ip data) {
            this.data = data;
        }
    }

    public static class Ip {
        private String ip;
        private String country;
        private String area;
        private String region;
        private String city;
        private String county;
        private String isp;
        private String countryId;
        private String areaId;
        private String regionId;
        private String cityId;
        private String countyId;
        private String ispId;

        public String getIp() {
            return ip;
        }

        public void setIp(String ip) {
            this.ip = ip;
        }

        public String getCountry() {
            return country;
        }

        public void setCountry(String country) {
            this.country = country;
        }

        public String getArea() {
            return area;
        }

        public void setArea(String area) {
            this.area = area;
        }

        public String getRegion() {
            return region;
        }

        public void setRegion(String region) {
            this.region = region;
        }

        public String getCity() {
            return city;
        }

        public void setCity(String city) {
            this.city = city;
        }

        public String getCounty() {
            return county;
        }

        public void setCounty(String county) {
            this.county = county;
        }

        public String getIsp() {
            return isp;
        }

        public void setIsp(String isp) {
            this.isp = isp;
        }

        public String getCountryId() {
            return countryId;
        }

        public void setCountryId(String countryId) {
            this.countryId = countryId;
        }

        public String getAreaId() {
            return areaId;
        }

        public void setAreaId(String areaId) {
            this.areaId = areaId;
        }

        public String getRegionId() {
            return regionId;
        }

        public void setRegionId(String regionId) {
            this.regionId = regionId;
        }

        public String getCityId() {
            return cityId;
        }

        public void setCityId(String cityId) {
            this.cityId = cityId;
        }

        public String getCountyId() {
            return countyId;
        }

        public void setCountyId(String countyId) {
            this.countyId = countyId;
        }

        public String getIspId() {
            return ispId;
        }

        public void setIspId(String ispId) {
            this.ispId = ispId;
        }
    }
}


測試用例


/**
 * @author Yawei Xi
 * @date 2018-10-13
 */
public class Test {
    public static void main(String[] args) {
        String ip = "140.206.194.105";
        IPUtil.Ip data = IPUtil.getIpDataByIp(ip);
        System.out.println("IP:" + data.getIp());
        System.out.println("城市:" + data.getCity());
        System.out.println("網絡服務商:" + data.getIsp());
    }
}


測試結果


IP:140.206.194.105
城市:上海
網絡服務商:聯通

獲取IP地址的詳細信息——Java