zoukankan      html  css  js  c++  java
  • IP工具类——IpAddress.java

    根据IP地址获取详细的地域信息,也可通过 http://whois.pconline.com.cn/ 获取地址信息。

     

    源码如下:(点击下载  IpAddress.java)

      1 import java.io.BufferedReader;
      2 import java.io.DataOutputStream;
      3 import java.io.IOException;
      4 import java.io.InputStreamReader;
      5 import java.io.UnsupportedEncodingException;
      6 import java.net.HttpURLConnection;
      7 import java.net.URL;
      8 
      9 /**
     10  * 根据IP地址获取详细的地域信息 
     11  *      也可通过 http://whois.pconline.com.cn/ 获取地址信息
     12  * 
     13  * 作者: zhoubang 
     14  * 日期:2015年8月7日 上午10:25:00
     15  */
     16 public class IpAddress {
     17 
     18     /**
     19      * 获取IP所在地址
     20      * 
     21      * 作者: zhoubang 
     22      * 日期:2015年8月7日 上午10:26:57
     23      * @param content
     24      * @param encodingString
     25      * @return
     26      * @throws UnsupportedEncodingException
     27      */
     28     public String getAddresses(String content, String encodingString)
     29             throws UnsupportedEncodingException {
     30         // 淘宝的接口
     31         String urlStr = "http://ip.taobao.com/service/getIpInfo.php";
     32         String returnStr = this.getResult(urlStr, content, encodingString);
     33         if (returnStr != null) {
     34             // 处理返回的省市区信息
     35             System.out.println(returnStr);
     36             String[] temp = returnStr.split(",");
     37             if (temp.length < 3) {
     38                 return "0";// 无效IP,局域网测试
     39             }
     40             String region = (temp[5].split(":"))[1].replaceAll(""", "");
     41             region = decodeUnicode(region);// 省份
     42 
     43             String country = "";
     44             String area = "";
     45             // String region = "";
     46             String city = "";
     47             String county = "";
     48             String isp = "";
     49             for (int i = 0; i < temp.length; i++) {
     50                 switch (i) {
     51                 case 1:
     52                     country = (temp[i].split(":"))[2].replaceAll(""", "");
     53                     country = decodeUnicode(country);// 国家
     54                     break;
     55                 case 3:
     56                     area = (temp[i].split(":"))[1].replaceAll(""", "");
     57                     area = decodeUnicode(area);// 地区
     58                     break;
     59                 case 5:
     60                     region = (temp[i].split(":"))[1].replaceAll(""", "");
     61                     region = decodeUnicode(region);// 省份
     62                     break;
     63                 case 7:
     64                     city = (temp[i].split(":"))[1].replaceAll(""", "");
     65                     city = decodeUnicode(city);// 市区
     66                     break;
     67                 case 9:
     68                     county = (temp[i].split(":"))[1].replaceAll(""", "");
     69                     county = decodeUnicode(county);// 地区
     70                     break;
     71                 case 11:
     72                     isp = (temp[i].split(":"))[1].replaceAll(""", "");
     73                     isp = decodeUnicode(isp); // ISP公司
     74                     break;
     75                 }
     76             }
     77 
     78             System.out.println(country + "=" + area + "=" + region + "=" + city + "=" + county + "=" + isp);
     79             return region;
     80         }
     81         return null;
     82     }
     83 
     84     /**
     85      * 请求接口
     86      * 
     87      * 作者: zhoubang 
     88      * 日期:2015年8月7日 上午10:27:45
     89      * @param urlStr
     90      * @param content
     91      * @param encoding
     92      * @return
     93      */
     94     private String getResult(String urlStr, String content, String encoding) {
     95         URL url = null;
     96         HttpURLConnection connection = null;
     97         try {
     98             url = new URL(urlStr);
     99             connection = (HttpURLConnection) url.openConnection();// 新建连接实例
    100             connection.setConnectTimeout(10000);// 设置连接超时时间,单位毫秒
    101             connection.setReadTimeout(10000);// 设置读取数据超时时间,单位毫秒
    102             connection.setDoOutput(true);// 是否打开输出流 true|false
    103             connection.setDoInput(true);// 是否打开输入流true|false
    104             connection.setRequestMethod("POST");// 提交方法POST|GET
    105             connection.setUseCaches(false);// 是否缓存true|false
    106             connection.connect();// 打开连接端口
    107             DataOutputStream out = new DataOutputStream(connection.getOutputStream());// 打开输出流往对端服务器写数据
    108             out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx
    109             out.flush();// 刷新
    110             out.close();// 关闭输出流
    111             BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));
    112             StringBuffer buffer = new StringBuffer();
    113             String line = "";
    114             while ((line = reader.readLine()) != null) {
    115                 buffer.append(line);
    116             }
    117             reader.close();
    118             return buffer.toString();
    119         } catch (IOException e) {
    120             e.printStackTrace();
    121         } finally {
    122             if (connection != null) {
    123                 connection.disconnect();// 关闭连接
    124             }
    125         }
    126         return null;
    127     }
    128 
    129     /**
    130      * unicode 转换成 中文
    131      * 
    132      * @author fanhui 2007-3-15
    133      * @param theString
    134      * @return
    135      */
    136     public static String decodeUnicode(String theString) {
    137         char aChar;
    138         int len = theString.length();
    139         StringBuffer outBuffer = new StringBuffer(len);
    140         for (int x = 0; x < len;) {
    141             aChar = theString.charAt(x++);
    142             if (aChar == '\') {
    143                 aChar = theString.charAt(x++);
    144                 if (aChar == 'u') {
    145                     int value = 0;
    146                     for (int i = 0; i < 4; i++) {
    147                         aChar = theString.charAt(x++);
    148                         switch (aChar) {
    149                         case '0':
    150                         case '1':
    151                         case '2':
    152                         case '3':
    153                         case '4':
    154                         case '5':
    155                         case '6':
    156                         case '7':
    157                         case '8':
    158                         case '9':
    159                             value = (value << 4) + aChar - '0';
    160                             break;
    161                         case 'a':
    162                         case 'b':
    163                         case 'c':
    164                         case 'd':
    165                         case 'e':
    166                         case 'f':
    167                             value = (value << 4) + 10 + aChar - 'a';
    168                             break;
    169                         case 'A':
    170                         case 'B':
    171                         case 'C':
    172                         case 'D':
    173                         case 'E':
    174                         case 'F':
    175                             value = (value << 4) + 10 + aChar - 'A';
    176                             break;
    177                         default:
    178                             throw new IllegalArgumentException("Malformed      encoding.");
    179                         }
    180                     }
    181                     outBuffer.append((char) value);
    182                 } else {
    183                     if (aChar == 't') {
    184                         aChar = '	';
    185                     } else if (aChar == 'r') {
    186                         aChar = '
    ';
    187                     } else if (aChar == 'n') {
    188                         aChar = '
    ';
    189                     } else if (aChar == 'f') {
    190                         aChar = 'f';
    191                     }
    192                     outBuffer.append(aChar);
    193                 }
    194             } else {
    195                 outBuffer.append(aChar);
    196             }
    197         }
    198         return outBuffer.toString();
    199     }
    200 
    201     // 测试
    202     public static void main(String[] args) {
    203         IpAddress addressUtils = new IpAddress();
    204         String ip = "27.54.227.84";
    205         String address = "";
    206         try {
    207             address = addressUtils.getAddresses("ip=" + ip, "utf-8");
    208         } catch (UnsupportedEncodingException e) {
    209             e.printStackTrace();
    210         }
    211         System.out.println(address);
    212         // 输出结果为:中国=华东=安徽省=滁州市==
    213         // 安徽省
    214     }
    215 }
  • 相关阅读:
    二分练习题4 查找最接近的元素 题解
    二分练习题5 二分法求函数的零点 题解
    二分练习题3 查找小于x的最大元素 题解
    二分练习题2 查找大于等于x的最小元素 题解
    二分练习题1 查找元素 题解
    code forces 1176 D. Recover it!
    code forces 1173 B. Nauuo and Chess
    code forces 1173 C. Nauuo and Cards
    吴恩达深度学习课程笔记-15
    吴恩达深度学习课程笔记-14
  • 原文地址:https://www.cnblogs.com/zhoubang521/p/5200060.html
Copyright © 2011-2022 走看看