IP工具类——IpAddress.java
根据IP地址获取详细的地域信息,也可通过 http://whois.pconline.com.cn/ 获取地址信息。
源码如下:(点击下载 IpAddress.java)
1 import java.io.BufferedReader; 2 import java.io.DataOutputStream; 3 import java.io.IOException; 4 import java.io.InputStreamReader; 5 import java.io.UnsupportedEncodingException; 6 import java.net.HttpURLConnection; 7 import java.net.URL; 8 9 /** 10 * 根据IP地址获取详细的地域信息 11 * 也可通过 http://whois.pconline.com.cn/ 获取地址信息 12 * 13 * 作者: zhoubang 14 * 日期:2015年8月7日 上午10:25:00 15 */ 16 public class IpAddress { 17 18 /** 19 * 获取IP所在地址 20 * 21 * 作者: zhoubang 22 * 日期:2015年8月7日 上午10:26:57 23 * @param content 24 * @param encodingString 25 * @return 26 * @throws UnsupportedEncodingException 27 */ 28 public String getAddresses(String content, String encodingString) 29 throws UnsupportedEncodingException { 30 // 淘宝的接口 31 String urlStr = "http://ip.taobao.com/service/getIpInfo.php"; 32 String returnStr = this.getResult(urlStr, content, encodingString); 33 if (returnStr != null) { 34 // 处理返回的省市区信息 35 System.out.println(returnStr); 36 String[] temp = returnStr.split(","); 37 if (temp.length < 3) { 38 return "0";// 无效IP,局域网测试 39 } 40 String region = (temp[5].split(":"))[1].replaceAll("\"", ""); 41 region = decodeUnicode(region);// 省份 42 43 String country = ""; 44 String area = ""; 45 // String region = ""; 46 String city = ""; 47 String county = ""; 48 String isp = ""; 49 for (int i = 0; i < temp.length; i++) { 50 switch (i) { 51 case 1: 52 country = (temp[i].split(":"))[2].replaceAll("\"", ""); 53 country = decodeUnicode(country);// 国家 54 break; 55 case 3: 56 area = (temp[i].split(":"))[1].replaceAll("\"", ""); 57 area = decodeUnicode(area);// 地区 58 break; 59 case 5: 60 region = (temp[i].split(":"))[1].replaceAll("\"", ""); 61 region = decodeUnicode(region);// 省份 62 break; 63 case 7: 64 city = (temp[i].split(":"))[1].replaceAll("\"", ""); 65 city = decodeUnicode(city);// 市区 66 break; 67 case 9: 68 county = (temp[i].split(":"))[1].replaceAll("\"", ""); 69 county = decodeUnicode(county);// 地区 70 break; 71 case 11: 72 isp = (temp[i].split(":"))[1].replaceAll("\"", ""); 73 isp = decodeUnicode(isp); // ISP公司 74 break; 75 } 76 } 77 78 System.out.println(country + "=" + area + "=" + region + "=" + city + "=" + county + "=" + isp); 79 return region; 80 } 81 return null; 82 } 83 84 /** 85 * 请求接口 86 * 87 * 作者: zhoubang 88 * 日期:2015年8月7日 上午10:27:45 89 * @param urlStr 90 * @param content 91 * @param encoding 92 * @return 93 */ 94 private String getResult(String urlStr, String content, String encoding) { 95 URL url = null; 96 HttpURLConnection connection = null; 97 try { 98 url = new URL(urlStr); 99 connection = (HttpURLConnection) url.openConnection();// 新建连接实例 100 connection.setConnectTimeout(10000);// 设置连接超时时间,单位毫秒 101 connection.setReadTimeout(10000);// 设置读取数据超时时间,单位毫秒 102 connection.setDoOutput(true);// 是否打开输出流 true|false 103 connection.setDoInput(true);// 是否打开输入流true|false 104 connection.setRequestMethod("POST");// 提交方法POST|GET 105 connection.setUseCaches(false);// 是否缓存true|false 106 connection.connect();// 打开连接端口 107 DataOutputStream out = new DataOutputStream(connection.getOutputStream());// 打开输出流往对端服务器写数据 108 out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx 109 out.flush();// 刷新 110 out.close();// 关闭输出流 111 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding)); 112 StringBuffer buffer = new StringBuffer(); 113 String line = ""; 114 while ((line = reader.readLine()) != null) { 115 buffer.append(line); 116 } 117 reader.close(); 118 return buffer.toString(); 119 } catch (IOException e) { 120 e.printStackTrace(); 121 } finally { 122 if (connection != null) { 123 connection.disconnect();// 关闭连接 124 } 125 } 126 return null; 127 } 128 129 /** 130 * unicode 转换成 中文 131 * 132 * @author fanhui 2007-3-15 133 * @param theString 134 * @return 135 */ 136 public static String decodeUnicode(String theString) { 137 char aChar; 138 int len = theString.length(); 139 StringBuffer outBuffer = new StringBuffer(len); 140 for (int x = 0; x < len;) { 141 aChar = theString.charAt(x++); 142 if (aChar == '\\') { 143 aChar = theString.charAt(x++); 144 if (aChar == 'u') { 145 int value = 0; 146 for (int i = 0; i < 4; i++) { 147 aChar = theString.charAt(x++); 148 switch (aChar) { 149 case '0': 150 case '1': 151 case '2': 152 case '3': 153 case '4': 154 case '5': 155 case '6': 156 case '7': 157 case '8': 158 case '9': 159 value = (value << 4) + aChar - '0'; 160 break; 161 case 'a': 162 case 'b': 163 case 'c': 164 case 'd': 165 case 'e': 166 case 'f': 167 value = (value << 4) + 10 + aChar - 'a'; 168 break; 169 case 'A': 170 case 'B': 171 case 'C': 172 case 'D': 173 case 'E': 174 case 'F': 175 value = (value << 4) + 10 + aChar - 'A'; 176 break; 177 default: 178 throw new IllegalArgumentException("Malformed encoding."); 179 } 180 } 181 outBuffer.append((char) value); 182 } else { 183 if (aChar == 't') { 184 aChar = '\t'; 185 } else if (aChar == 'r') { 186 aChar = '\r'; 187 } else if (aChar == 'n') { 188 aChar = '\n'; 189 } else if (aChar == 'f') { 190 aChar = '\f'; 191 } 192 outBuffer.append(aChar); 193 } 194 } else { 195 outBuffer.append(aChar); 196 } 197 } 198 return outBuffer.toString(); 199 } 200 201 // 测试 202 public static void main(String[] args) { 203 IpAddress addressUtils = new IpAddress(); 204 String ip = "27.54.227.84"; 205 String address = ""; 206 try { 207 address = addressUtils.getAddresses("ip=" + ip, "utf-8"); 208 } catch (UnsupportedEncodingException e) { 209 e.printStackTrace(); 210 } 211 System.out.println(address); 212 // 输出结果为:中国=华东=安徽省=滁州市== 213 // 安徽省 214 } 215 }
欢迎访问 JAVA技术分享 www.2b2b92b.com