unis_sip/src/main/java/com/ruoyi/common/utils/AddressUtils.java

176 lines
6.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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.phpip=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) {
System.out.println("温馨提醒:您的主机已经断网,请您检查主机的网络连接");
System.out.println("根据IP获取所在位置----------错误消息:"+e.getMessage());
} 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"));
}
}