淘宝(新浪)API获取IP地址位置信息
2020-12-13 16:31
标签:des style blog http io color ar os java 注:转载 非原创 淘宝(新浪)API获取IP地址位置信息 标签:des style blog http io color ar os java 原文地址:http://www.cnblogs.com/Wen-yu-jing/p/4084703.html 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.length3){
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 }
上一篇:Win7主题被禁用