您的位置:首页 > 编程语言 > Java开发

【java】利用第三方的IP地址属地查询

2016-05-05 15:48 501 查看
任务是根据IP地质查询所述的省份,可以运用第三方的工具。

网上搜了一下,采用了网上的现成代码并进行了修改:返回的参数封装成了DTO,包含所属国家、地区、省份、城市、互联网服务提供商。

放到同一个pakage里,运行Test.java或参照Test.java调用即可。

++++GetAddressByIp类+++++++++++++++++++++++++++++++++++++++++++++++

package main;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import net.sf.json.JSONObject;

/*

 * Author: Luo Tianyan

 * Version:20160505

 * 

 * 方法,用于根据IP地址找到所属国家、地区、省份、城市、互联网服务提供商

 * */

public class GetAddressByIp {

// 调用该类的getAddressByIp()方法即可
public static IpParserDTO getAddressByIp(String IP) {
IpParserDTO resultDto = new IpParserDTO();
try {
// 使用淘宝提供的service
String str = getJsonContent("http://ip.taobao.com/service/getIpInfo.php?ip="
+ IP);

// System.out.println(str);

JSONObject obj = JSONObject.fromObject(str);
JSONObject obj2 = (JSONObject) obj.get("data");
String code = String.valueOf(obj.get("code"));

if (code.equals("0")) {
resultDto.setCountry(obj2.get("country").toString());
resultDto.setArea(obj2.get("area").toString());
resultDto.setProvince(obj2.get("region").toString());
resultDto.setCity(obj2.get("city").toString());
resultDto.setServer(obj2.get("isp").toString());

} else {
System.out.println("IP地址有误");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("获取IP地址异常:" + e.getMessage());
}
return resultDto;
}

public static String getJsonContent(String urlStr) {
try {
// 获取HttpURLConnection连接对象
URL url = new URL(urlStr);
HttpURLConnection httpConn = (HttpURLConnection) url
.openConnection();
// 设置连接属性
httpConn.setConnectTimeout(3000);
httpConn.setDoInput(true);
httpConn.setRequestMethod("GET");
// 获取相应码
int respCode = httpConn.getResponseCode();
if (respCode == 200) {
return convertStream2Json(httpConn.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}

private static String convertStream2Json(InputStream inputStream) {
String jsonStr = "";
// ByteArrayOutputStream相当于内存输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
// 将输入流转移到内存输出流中
try {
while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) {
out.write(buffer, 0, len);
}
// 将内存流转换为字符串
jsonStr = new String(out.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return jsonStr;
}

}

++++++++IpParserDTO类+++++++++++++++++++++++++++++++++

package main;

import java.io.Serializable;

/*

 * Author: Luo Tianyan

 * Version:20160505

 * 

 * 用于ip解析的DTO

 * */

public class IpParserDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String country;// 国家
private String area;// 地区,如“华南”
private String province;// 省份
private String city;// 城市
private String server;// 互联网服务提供商,如“电信”

public String getCountry() {
return country;
}

public void setCountry(String country) {
this.country = country;
}

public String getArea() {
return area;
}

public void setArea(String area) {
this.area = area;
}

public String getProvince() {
return province;
}

public void setProvince(String province) {
this.province = province;
}

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

public String getServer() {
return server;
}

public void setServer(String server) {
this.server = server;
}

public static long getSerialversionuid() {
return serialVersionUID;
}

@Override
public String toString() {
return "IpParserDTO [country=" + country + ", area=" + area
+ ", province=" + province + ", city=" + city + ", server="
+ server + "]";
}

}

+++++++++++Test类+++++++++++++++++++++++++++++++

package main;

import main.IpParserDTO;

/*

 * Author: Luo Tianyan

 * Version:20160505

 * 

 * 方法,测试用

 * */

public class Test {
public static void main(String[] args) {
// 调用GetAddressByIp类的getAddressByIp()方法即可,参数为String的IP地址,返回IpParserDTO对象
IpParserDTO test1 = GetAddressByIp.getAddressByIp("221.238.6.1");

// IpParserDTO对象的属性:国家country、地区area、省份province、城市city、互联网服务提供商server
// 均有各自的getter和setter
System.out.println(test1.getProvince());
}

}

++++++++++++++++++++++
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息