mirror of https://gitee.com/y_project/RuoYi.git
yangzhengze
7 years ago
2 changed files with 177 additions and 3 deletions
@ -0,0 +1,174 @@
|
||||
package com.ruoyi.common.utils; |
||||
import com.alibaba.fastjson.JSON; |
||||
import com.alibaba.fastjson.JSONObject; |
||||
|
||||
import java.io.BufferedReader; |
||||
import java.io.DataOutputStream; |
||||
import java.io.IOException; |
||||
import java.io.InputStreamReader; |
||||
import java.io.UnsupportedEncodingException; |
||||
import java.net.HttpURLConnection; |
||||
import java.net.URL; |
||||
|
||||
/** |
||||
* 获取地址类 |
||||
*/ |
||||
public class AddressUtils { |
||||
public static String getAddresses(String content, String encodingString) throws UnsupportedEncodingException { |
||||
/** 根据IP查询地址 http://ip.taobao.com/service/getIpInfo.php?ip=111.111.111.111*/ |
||||
String urlStr = "http://ip.taobao.com/service/getIpInfo.php"; |
||||
String returnStr = getResult(urlStr, content, encodingString); |
||||
if (returnStr != null) { |
||||
returnStr = decodeUnicode(returnStr); |
||||
String[] temp = returnStr.split(","); |
||||
if (temp.length < 3) { |
||||
return "0"; |
||||
} |
||||
return returnStr; |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* 获取查询结果 |
||||
* @param urlStr |
||||
* @param content |
||||
* @param encoding |
||||
* @return |
||||
*/ |
||||
private static String getResult(String urlStr, String content, String encoding) { |
||||
URL url = null; |
||||
HttpURLConnection connection = null; |
||||
try { |
||||
url = new URL(urlStr); |
||||
connection = (HttpURLConnection) url.openConnection(); |
||||
connection.setConnectTimeout(2000); |
||||
connection.setReadTimeout(2000); |
||||
connection.setDoOutput(true); |
||||
connection.setDoInput(true); |
||||
connection.setRequestMethod("POST"); |
||||
connection.setUseCaches(false); |
||||
connection.connect(); |
||||
DataOutputStream out = new DataOutputStream(connection.getOutputStream()); |
||||
out.writeBytes(content); |
||||
out.flush(); |
||||
out.close(); |
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding)); |
||||
StringBuffer buffer = new StringBuffer(); |
||||
String line = ""; |
||||
while ((line = reader.readLine()) != null) { |
||||
buffer.append(line); |
||||
} |
||||
reader.close(); |
||||
return buffer.toString(); |
||||
} catch (IOException e) { |
||||
e.printStackTrace(); |
||||
} finally { |
||||
if (connection != null) { |
||||
connection.disconnect(); |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* @param theString |
||||
* @return |
||||
*/ |
||||
public static String decodeUnicode(String theString) { |
||||
char aChar; |
||||
int len = theString.length(); |
||||
StringBuffer outBuffer = new StringBuffer(len); |
||||
for (int x = 0; x < len;) { |
||||
aChar = theString.charAt(x++); |
||||
if (aChar == '\\') { |
||||
aChar = theString.charAt(x++); |
||||
if (aChar == 'u') { |
||||
int value = 0; |
||||
for (int i = 0; i < 4; i++) { |
||||
aChar = theString.charAt(x++); |
||||
switch (aChar) { |
||||
case '0': |
||||
case '1': |
||||
case '2': |
||||
case '3': |
||||
case '4': |
||||
case '5': |
||||
case '6': |
||||
case '7': |
||||
case '8': |
||||
case '9': |
||||
value = (value << 4) + aChar - '0'; |
||||
break; |
||||
case 'a': |
||||
case 'b': |
||||
case 'c': |
||||
case 'd': |
||||
case 'e': |
||||
case 'f': |
||||
value = (value << 4) + 10 + aChar - 'a'; |
||||
break; |
||||
case 'A': |
||||
case 'B': |
||||
case 'C': |
||||
case 'D': |
||||
case 'E': |
||||
case 'F': |
||||
value = (value << 4) + 10 + aChar - 'A'; |
||||
break; |
||||
default: |
||||
throw new IllegalArgumentException("Malformed encoding."); |
||||
} |
||||
} |
||||
outBuffer.append((char) value); |
||||
} else { |
||||
if (aChar == 't') { |
||||
aChar = '\t'; |
||||
} else if (aChar == 'r') { |
||||
aChar = '\r'; |
||||
} else if (aChar == 'n') { |
||||
aChar = '\n'; |
||||
} else if (aChar == 'f') { |
||||
aChar = '\f'; |
||||
} |
||||
outBuffer.append(aChar); |
||||
} |
||||
} else { |
||||
outBuffer.append(aChar); |
||||
} |
||||
} |
||||
return outBuffer.toString(); |
||||
} |
||||
|
||||
public static String getRealAddressByIP(String ip) { |
||||
String address = ""; |
||||
try { |
||||
|
||||
address = getAddresses("ip=" + ip, "utf-8"); |
||||
|
||||
////把JSON文本parse成JSONObject,通俗就是把json文本转为json对象
|
||||
JSONObject json= JSONObject.parseObject(address); |
||||
|
||||
//通过其get的方法来获取data的value由于返回的是object对象,而data的value本身又是json字符串,所以我们可以进行强转
|
||||
JSONObject object = (JSONObject)json.get("data"); |
||||
String country=object.getString("country"); |
||||
String region = object.getString("region"); |
||||
String city = object.getString("city"); |
||||
address = country+""+region + "" + city; |
||||
} catch (Exception e) { |
||||
|
||||
} |
||||
return address; |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
try { |
||||
System.out.println(getAddresses("ip=111.85.32.37","utf-8")); |
||||
} catch (UnsupportedEncodingException e) { |
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace(); |
||||
} |
||||
System.out.println(getRealAddressByIP("111.85.32.37")); |
||||
} |
||||
} |
Loading…
Reference in new issue