Java获取本机外网IP及区域信息

用到了Jsoup及阿里巴巴的fastjson相关的jar包,也是对于最近学习的应用实践。废话不多说,直接上代码:



import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;


import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;


/**
 * 先获取到本机外网ip,再根据IP地址获取详细的地域信息
 */
public class AddressUtils {


// 测试
public static void main(String[] args) {
String[] address = null;
try {
address = AddressUtils.getAddresses("utf-8");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(JSON.toJSONString(address));
}

/**
*@param encoding
*            服务器端请求编码。如GBK,UTF-8等
*   @return address; 省份 = address[0] , 城市 = address[1]        
*/
public static String[] getAddresses(String encodingString)
throws Exception {
// 这里调用pconline的接口
String urlStr = "http://ip.taobao.com/service/getIpInfo.php";
// 从 http://ip.taobao.com/service/getIpInfo.php 取得IP所在的省市区信息
String returnStr =getResult(urlStr, "ip="+getWebIp(), encodingString);
if (returnStr != null) {
// 处理返回的省市区信息

JSONObject json =JSONObject.parseObject(returnStr);
String data = json.getString("data");
JSONObject str = JSONObject.parseObject(data);
String state = str.getString("region");
String city = str.getString("city");

String[] address = new String[]{state,city};

return address;
}
return null;
}


/**
* @param urlStr
*            请求的地址
* @param content
*            请求的参数 格式为:name=xxx&pwd=xxx
* @param encoding
*            服务器端请求编码。如GBK,UTF-8等
* @return 最终的数据
*/
private static String getResult(String urlStr, String content, String encoding) {
URL url = null;
HttpURLConnection conn = null;
try {

url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();// 新建连接实例
conn.setConnectTimeout(5000);// 设置连接超时时间,单位毫秒
conn.setReadTimeout(5000);// 设置读取数据超时时间,单位毫秒
conn.setDoOutput(true);// 是否打开输出流 true|false
conn.setDoInput(true);// 是否打开输入流true|false
conn.setRequestMethod("POST");// 提交方法POST|GET
conn.setUseCaches(false);// 是否缓存true|false
conn.connect();// 打开连接端口
DataOutputStream out = new DataOutputStream(
conn.getOutputStream());// 打开输出流往对端服务器写数据
out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx
out.flush();// 刷新
out.close();// 关闭输出流
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据
// ,以BufferedReader流来读取
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 (conn != null) {
conn.disconnect();// 关闭连接
}
}
return null;
}


private static String getWebIp(){
String urlStr = "http://iframe.ip138.com/ic.asp";
try {
Document doc = Jsoup.connect(urlStr).userAgent("Mozilla")
 .cookie("auth", "token").header("encoding", "utf-8")
 .timeout(3000).post();
String data = doc.select("body center").first().html();
String ip = data.substring(data.indexOf("[")+1,data.indexOf("]"));

return ip;
} catch (Exception e) {
throw new RuntimeException("获取本机ip出错!");
}
}

}

转载于:https://my.oschina.net/u/1157906/blog/178998

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值