码迷,mamicode.com
首页 > Windows程序 > 详细

淘宝(新浪)API获取IP地址位置信息

时间:2014-11-09 12:35:23      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   io   color   ar   os   java   

  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 = \t;
159                     } else if (aChar == r) {
160                         aChar = \r;
161                     } else if (aChar == n) {
162                         aChar = \n;
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 }

注:转载 非原创

淘宝(新浪)API获取IP地址位置信息

标签:des   style   blog   http   io   color   ar   os   java   

原文地址:http://www.cnblogs.com/Wen-yu-jing/p/4084703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!