JAVA解析淘宝IP地址库

服务器地址:

http://ip.taobao.com/instructions.php

 

 

需 JSON jar包

  1 import java.io.BufferedReader;
  2 import java.io.DataOutputStream;
  3 import java.io.InputStreamReader;
  4 import java.net.HttpURLConnection;
  5 import java.net.URL;
  6 
  7 import org.json.JSONObject;
  8 
  9 
 10 /*
 11 import org.json.JSONObject; */
 12 
 13 public class AddressUtils {
 14 
 15     /**
 16      * 获取地址
 17      * @param params
 18      * @param encoding
 19      * @return
 20      * @throws Exception
 21      */
 22     public String getAddress(String params, String encoding) throws Exception{
 23         
 24         String path = "http://ip.taobao.com/service/getIpInfo.php";
 25         
 26         String returnStr = this.getRs(path, params, encoding);
 27         
 28         JSONObject json=null;
 29         
 30         if(returnStr != null){
 31             
 32             json = new JSONObject(returnStr);
 33             
 34             if("0".equals(json.get("code").toString())){
 35                 
 36                 StringBuffer buffer = new StringBuffer();
 37                 
 38                 buffer.append(decodeUnicode(json.optJSONObject("data").getString("country")));//国家
 39                 
 40                 buffer.append(decodeUnicode(json.optJSONObject("data").getString("area")));//地区
 41                 
 42                 buffer.append(decodeUnicode(json.optJSONObject("data").getString("region")));//省份
 43                 
 44                 buffer.append(decodeUnicode(json.optJSONObject("data").getString("city")));//市区
 45                 
 46                 buffer.append(decodeUnicode(json.optJSONObject("data").getString("county")));//地区
 47                 
 48                 buffer.append(decodeUnicode(json.optJSONObject("data").getString("isp")));//ISP公司
 49                 
 50                 //System.out.println(buffer.toString());
 51                 
 52                 return buffer.toString();
 53                 
 54             }else{
 55                 
 56                 return "获取地址失败";
 57                 
 58             }
 59             
 60         }
 61     return null;
 62         
 63     }
 64     /**
 65      * 从url获取结果
 66      * @param path
 67      * @param params
 68      * @param encoding
 69      * @return
 70      */
 71     public String getRs(String path, String params, String encoding){
 72         
 73         URL url = null;
 74         
 75         HttpURLConnection connection = null;
 76             
 77         try {
 78             
 79             url = new URL(path);
 80                 
 81             connection = (HttpURLConnection)url.openConnection();// 新建连接实例
 82                 
 83             connection.setConnectTimeout(2000);// 设置连接超时时间,单位毫秒
 84             
 85             connection.setReadTimeout(2000);// 设置读取数据超时时间,单位毫秒
 86             
 87             connection.setDoInput(true);// 是否打开输出流 true|false
 88             
 89             connection.setDoOutput(true);// 是否打开输入流true|false
 90             
 91             connection.setRequestMethod("POST");// 提交方法POST|GET
 92             
 93             connection.setUseCaches(false);// 是否缓存true|false
 94             
 95             connection.connect();// 打开连接端口
 96             
 97             DataOutputStream out = new DataOutputStream(connection.getOutputStream());
 98             
 99             out.writeBytes(params);
100             
101             out.flush();
102             
103             out.close();
104             
105             
106             BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),encoding));
107             
108             StringBuffer buffer = new StringBuffer();
109             
110             String line = "";
111             
112             while ((line = reader.readLine())!= null) {
113                 
114                 buffer.append(line);
115                 
116             }
117             
118             reader.close();
119             
120             return buffer.toString();
121             
122         } catch (Exception e) {
123             
124             e.printStackTrace();
125             
126         }finally{
127             
128             connection.disconnect();// 关闭连接
129             
130         }
131         
132         return null;
133     }
134     /**
135      * 字符转码
136      * @param theString
137      * @return
138      */
139     public static String decodeUnicode(String theString){
140         
141         char aChar;
142         
143         int len = theString.length();
144         
145         StringBuffer buffer = new StringBuffer(len);
146         
147         for (int i = 0; i < len;) {
148             
149             aChar = theString.charAt(i++);
150             
151             if(aChar == '\\'){
152                 
153                 aChar = theString.charAt(i++);
154             
155                 if(aChar == 'u'){
156                     
157                     int val = 0;
158                     
159                     for(int j = 0; j < 4; j++){
160                         
161                         aChar = theString.charAt(i++);
162                         
163                         switch (aChar) {
164                         
165                         case '0':case '1':case '2':case '3':    
166                         case '4':case '5':
167                             
168                         case '6':
169                         
170                         case '7':
171                             
172                         case '8':
173                             
174                         case '9':
175                             
176                         val = (val << 4) + aChar - '0';
177                         
178                         break;
179     
180                         case 'a':
181                             
182                         case 'b':
183                             
184                         case 'c':
185                             
186                         case 'd':
187                             
188                         case 'e':
189                             
190                         case 'f':
191                             
192                         val = (val << 4) + 10 + aChar - 'a';
193                                
194                         break;
195                         
196                         case 'A':
197                             
198                         case 'B':
199                             
200                         case 'C':
201                             
202                         case 'D':
203                             
204                         case 'E':
205                             
206                         case 'F':
207                           
208                         val = (val << 4) + 10 + aChar - 'A';
209                                
210                         break;
211                                
212                         default:
213                         
214                         throw new IllegalArgumentException(
215                              
216                             "Malformed      encoding.");
217                         }
218                         
219                     }
220                     
221                     buffer.append((char) val);
222                     
223                     }else{
224                         
225                         if(aChar == 't'){
226                             
227                             aChar = '\t';
228                         }
229                         
230                         if(aChar == 'r'){
231                             
232                             aChar = '\r';
233                         }
234                         
235                         if(aChar == 'n'){
236                             
237                             aChar = '\n';
238                         }
239                         
240                         if(aChar == 'f'){
241                             
242                             aChar = '\f';
243                             
244                         }
245                         
246                         buffer.append(aChar);
247                     }
248                 
249                 }else{
250                     
251                     buffer.append(aChar);
252                     
253                 }
254                 
255             }
256         
257         return buffer.toString();
258         
259     }
260 
261     /**测试
262      * @param args
263      */
264     public static void main(String[] args) {
265         
266         AddressUtils addressUtils = new AddressUtils();
267         
268           String ip = "180.112.173.164";
269           
270           String address = "";
271           
272           try {
273               
274            address = addressUtils.getAddress("ip="+ip, "utf-8");
275            
276           } catch (Exception e) {
277               
278               e.printStackTrace();
279           }
280           
281          System.out.println(address);
282           
283 
284     }
285 }

 

 

posted on 2014-10-27 09:49  @冰糖  阅读(1041)  评论(0编辑  收藏  举报

导航