通过ip查询地址之淘宝pconline的接口

public class AddressUtils {  


    /** 
      * 
      * @param content 
      *            请求的参数 格式为:name=xxx&pwd=xxx 
      * @param encoding 
      *            服务器端请求编码。如GBK,UTF-8等 
      * @return 
      * @throws UnsupportedEncodingException 
      */  
     public Map<String,Object> getAddresses(String content, String encodingString)  
       throws UnsupportedEncodingException {  
      // 这里调用pconline的接口  
      String urlStr = "http://ip.taobao.com/service/getIpInfo.php";  
      // 从http://whois.pconline.com.cn取得IP所在的省市区信息  
      String returnStr = this.getResult(urlStr, content, encodingString);  
      if (returnStr != null) {  
       // 处理返回的省市区信息  
//     System.out.println(returnStr);  
       String[] temp = returnStr.split(",");  
       if(temp.length<3){  
        return null;//无效IP,局域网测试  
       }  
       Map<String,Object> map =new HashMap<>();
       String region = (temp[5].split(":"))[1].replaceAll("\"", "");  
       region = decodeUnicode(region);// 省份  

                String country = "";  
                String area = "";  
                // String region = "";  
                String city = "";  
                String county = "";  
                String isp = "";  
                for (int i = 0; i < temp.length; i++) {  
                    switch (i) {  
                    case 2:  
                        country = (temp[i].split(":"))[1].replaceAll("\"", "");  
                        country = decodeUnicode(country);// 国家  
                        break;  
                        case 3:  
                            area = (temp[i].split(":"))[1].replaceAll("\"", "");  
                            area = decodeUnicode(area);// 地区   
                        break;  
                        case 4:  
                            region = (temp[i].split(":"))[1].replaceAll("\"", "");  
                            region = decodeUnicode(region);// 省份   
                        break;   
                        case 5:  
                            city = (temp[i].split(":"))[1].replaceAll("\"", "");  
                            city = decodeUnicode(city);// 市区  
                        break;   
                        case 6:  
                                county = (temp[i].split(":"))[1].replaceAll("\"", "");  
                                county = decodeUnicode(county);// 地区   
                        break;  
                        case 7:  
                            isp = (temp[i].split(":"))[1].replaceAll("\"", "");  
                            isp = decodeUnicode(isp); // ISP公司  
                        break;  
                    }  
                }  
         map.put("country", country);
         map.put("city", region+"省"+city+"市");
       return map;  
      }  
      return null;  
     }  
     /** 
      * @param urlStr 
      *            请求的地址 
      * @param content 
      *            请求的参数 格式为:name=xxx&pwd=xxx 
      * @param encoding 
      *            服务器端请求编码。如GBK,UTF-8等 
      * @return 
      */  
     private String getResult(String urlStr, String content, String encoding) {  
      URL url = null;  
      HttpURLConnection connection = null;  
      try {  
       url = new URL(urlStr);  
       connection = (HttpURLConnection) url.openConnection();// 新建连接实例  
       connection.setConnectTimeout(2000);// 设置连接超时时间,单位毫秒  
       connection.setReadTimeout(2000);// 设置读取数据超时时间,单位毫秒  
       connection.setDoOutput(true);// 是否打开输出流 true|false  
       connection.setDoInput(true);// 是否打开输入流true|false  
       connection.setRequestMethod("POST");// 提交方法POST|GET  
       connection.setUseCaches(false);// 是否缓存true|false  
       connection.connect();// 打开连接端口  
       DataOutputStream out = new DataOutputStream(connection  
         .getOutputStream());// 打开输出流往对端服务器写数据  
       out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx  
       out.flush();// 刷新  
       out.close();// 关闭输出流  
       BufferedReader reader = new BufferedReader(new InputStreamReader(  
         connection.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据  
       // ,以BufferedReader流来读取  
       StringBuffer buffer = new StringBuffer();  
       String line = "";  
       while ((line = reader.readLine()) != null) {  
        buffer.append(line);  
       }  
       reader.close();  
       return buffer.toString();  
      } catch (IOException e) {  
       e.printStackTrace();  
      } finally {  
       if (connection != null) {  
        connection.disconnect();// 关闭连接  
       }  
      }  
      return null;  
     }  
     /** 
      * unicode 转换成 中文 
      * 
      * @author fanhui 2007-3-15 
      * @param theString 
      * @return 
      */  
     public static String decodeUnicode(String theString) {  
      char aChar;  
      int len = theString.length();  
      StringBuffer outBuffer = new StringBuffer(len);  
      for (int x = 0; x < len;) {  
       aChar = theString.charAt(x++);  
       if (aChar == '\\') {  
        aChar = theString.charAt(x++);  
        if (aChar == 'u') {  
         int value = 0;  
         for (int i = 0; i < 4; i++) {  
          aChar = theString.charAt(x++);  
          switch (aChar) {  
          case '0':  
          case '1':  
          case '2':  
          case '3':  
          case '4':  
          case '5':  
          case '6':  
          case '7':  
          case '8':  
          case '9':  
           value = (value << 4) + aChar - '0';  
           break;  
          case 'a':  
          case 'b':  
          case 'c':  
          case 'd':  
          case 'e':  
          case 'f':  
           value = (value << 4) + 10 + aChar - 'a';  
           break;  
          case 'A':  
          case 'B':  
          case 'C':  
          case 'D':  
          case 'E':  
          case 'F':  
           value = (value << 4) + 10 + aChar - 'A';  
           break;  
          default:  
           throw new IllegalArgumentException(  
             "Malformed      encoding.");  
          }  
         }  
         outBuffer.append((char) value);  
        } else {  
         if (aChar == 't') {  
          aChar = '\t';  
         } else if (aChar == 'r') {  
          aChar = '\r';  
         } else if (aChar == 'n') {  
          aChar = '\n';  
         } else if (aChar == 'f') {  
          aChar = '\f';  
         }  
         outBuffer.append(aChar);  
        }  
       } else {  
        outBuffer.append(aChar);  
       }  
      }  
      return outBuffer.toString();  
     }  
     // 测试  
     public static void main(String[] args) {  
      AddressUtils addressUtils = new AddressUtils();  
      String ip = "115.236.52.30";  
      Map<String, Object> address ;  
      try {  
       address = addressUtils.getAddresses("ip="+ip, "utf-8");  

      } catch (UnsupportedEncodingException e) {  
       e.printStackTrace();  
      }  
     } 
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值