zoukankan      html  css  js  c++  java
  • 淘宝(新浪)API获取IP地址位置信息

      1 package com.parse;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.DataOutputStream;
      5 import java.io.IOException;
      6 import java.io.InputStreamReader;
      7 import java.io.UnsupportedEncodingException;
      8 import java.net.HttpURLConnection;
      9 import java.net.URL;
     10 
     11 /**
     12  * 根据IP地址获取详细的地域信息
     13  * 淘宝API : http://ip.taobao.com/service/getIpInfo.php?ip=218.192.3.42
     14  * 新浪API : http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.192.3.42
     15  * @File AddressUtils.java
     16  * @Package org.gditc.weicommunity.util
     17  * @Description TODO
     18  * @Copyright Copyright © 2014
     19  * @Site https://github.com/Cryhelyxx
     20  * @Blog http://blog.csdn.net/Cryhelyxx
     21  * @Email cryhelyxx@gmail.com
     22  * @Company GDITC
     23  * @Date 2014年11月6日 下午1:46:37
     24  * @author Cryhelyxx
     25  * @version 1.0
     26  */
     27 public class AddressUtils {
     28     /**
     29      * 
     30      * @param content
     31      *            请求的参数 格式为:name=xxx&pwd=xxx
     32      * @param encoding
     33      *            服务器端请求编码。如GBK,UTF-8等
     34      * @return
     35      * @throws UnsupportedEncodingException
     36      */
     37     public static String getAddresses(String content, String encodingString)
     38             throws UnsupportedEncodingException {
     39         // 这里调用淘宝API
     40         String urlStr = "http://ip.taobao.com/service/getIpInfo.php";
     41         // 从http://whois.pconline.com.cn取得IP所在的省市区信息
     42         String returnStr = getResult(urlStr, content, encodingString);
     43         if (returnStr != null) {
     44             // 处理返回的省市区信息
     45             System.out.println("(1) unicode转换成中文前的returnStr : " + returnStr);
     46             returnStr = decodeUnicode(returnStr);
     47             System.out.println("(2) unicode转换成中文后的returnStr : " + returnStr);
     48             String[] temp = returnStr.split(",");
     49             if(temp.length<3){
     50                 return "0";//无效IP,局域网测试
     51             }
     52             return returnStr;
     53         }
     54         return null;
     55     }
     56     /**
     57      * @param urlStr
     58      *            请求的地址
     59      * @param content
     60      *            请求的参数 格式为:name=xxx&pwd=xxx
     61      * @param encoding
     62      *            服务器端请求编码。如GBK,UTF-8等
     63      * @return
     64      */
     65     private static String getResult(String urlStr, String content, String encoding) {
     66         URL url = null;
     67         HttpURLConnection connection = null;
     68         try {
     69             url = new URL(urlStr);
     70             connection = (HttpURLConnection) url.openConnection();// 新建连接实例
     71             connection.setConnectTimeout(2000);// 设置连接超时时间,单位毫秒
     72             connection.setReadTimeout(2000);// 设置读取数据超时时间,单位毫秒
     73             connection.setDoOutput(true);// 是否打开输出流 true|false
     74             connection.setDoInput(true);// 是否打开输入流true|false
     75             connection.setRequestMethod("POST");// 提交方法POST|GET
     76             connection.setUseCaches(false);// 是否缓存true|false
     77             connection.connect();// 打开连接端口
     78             DataOutputStream out = new DataOutputStream(connection
     79                     .getOutputStream());// 打开输出流往对端服务器写数据
     80             out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx
     81             out.flush();// 刷新
     82             out.close();// 关闭输出流
     83             BufferedReader reader = new BufferedReader(new InputStreamReader(
     84                     connection.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据
     85             // ,以BufferedReader流来读取
     86             StringBuffer buffer = new StringBuffer();
     87             String line = "";
     88             while ((line = reader.readLine()) != null) {
     89                 buffer.append(line);
     90             }
     91             reader.close();
     92             return buffer.toString();
     93         } catch (IOException e) {
     94             e.printStackTrace();
     95         } finally {
     96             if (connection != null) {
     97                 connection.disconnect();// 关闭连接
     98             }
     99         }
    100         return null;
    101     }
    102     /**
    103      * unicode 转换成 中文
    104      * 
    105      * @author fanhui 2007-3-15
    106      * @param theString
    107      * @return
    108      */
    109     public static String decodeUnicode(String theString) {
    110         char aChar;
    111         int len = theString.length();
    112         StringBuffer outBuffer = new StringBuffer(len);
    113         for (int x = 0; x < len;) {
    114             aChar = theString.charAt(x++);
    115             if (aChar == '\') {
    116                 aChar = theString.charAt(x++);
    117                 if (aChar == 'u') {
    118                     int value = 0;
    119                     for (int i = 0; i < 4; i++) {
    120                         aChar = theString.charAt(x++);
    121                         switch (aChar) {
    122                         case '0':
    123                         case '1':
    124                         case '2':
    125                         case '3':
    126                         case '4':
    127                         case '5':
    128                         case '6':
    129                         case '7':
    130                         case '8':
    131                         case '9':
    132                             value = (value << 4) + aChar - '0';
    133                             break;
    134                         case 'a':
    135                         case 'b':
    136                         case 'c':
    137                         case 'd':
    138                         case 'e':
    139                         case 'f':
    140                             value = (value << 4) + 10 + aChar - 'a';
    141                             break;
    142                         case 'A':
    143                         case 'B':
    144                         case 'C':
    145                         case 'D':
    146                         case 'E':
    147                         case 'F':
    148                             value = (value << 4) + 10 + aChar - 'A';
    149                             break;
    150                         default:
    151                             throw new IllegalArgumentException(
    152                                     "Malformed      encoding.");
    153                         }
    154                     }
    155                     outBuffer.append((char) value);
    156                 } else {
    157                     if (aChar == 't') {
    158                         aChar = '	';
    159                     } else if (aChar == 'r') {
    160                         aChar = '
    ';
    161                     } else if (aChar == 'n') {
    162                         aChar = '
    ';
    163                     } else if (aChar == 'f') {
    164                         aChar = 'f';
    165                     }
    166                     outBuffer.append(aChar);
    167                 }
    168             } else {
    169                 outBuffer.append(aChar);
    170             }
    171         }
    172         return outBuffer.toString();
    173     }
    174     // 测试
    175     public static void main(String[] args) throws Exception {
    176         AddressUtils addressUtils = new AddressUtils();
    177         // 测试ip 219.136.134.157 中国=华南=广东省=广州市=越秀区=电信
    178         String ip = "182.254.8.146";
    179         String address = "";
    180         try {
    181             address = addressUtils.getAddresses("ip="+ip, "utf-8");
    182         } catch (UnsupportedEncodingException e) {
    183             // TODO Auto-generated catch block
    184             e.printStackTrace();
    185         }
    186         System.out.println("parseResult:"+address);
    187         // 输出结果为:广东省,广州市,越秀区
    188     }
    189 }

    注:转载 非原创

  • 相关阅读:
    sql server 笔记(数据类型/新建、修改、删除数据表/)
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Nam
    jquery 操作 checkbox select
    layui常见问题
    Sublime Text 3下载-汉化-插件配置
    CSS前端开发学习总结、一
    如何用 JavaScript 下载文件
    腾讯大王卡、天王卡代申请
    新人报道~cnblogs
    Node.js
  • 原文地址:https://www.cnblogs.com/Wen-yu-jing/p/4084703.html
Copyright © 2011-2022 走看看