java根据ip地址获取详细地域信息的方法
互联网有很多接口可以实现通过ip查询到具体的位置,如下:
通过淘宝IP地址库获取IP位置
请求接口(GET):http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]
响应信息:(json格式的)国家、省(自治区或直辖市)、市(县)、运营商
返回数据格式:
{“code”:0,”data”:{“ip”:”210.75.225.254”,”country”:”\u4e2d\u56fd”,”area”:”\u534e\u5317”,
“region”:”\u5317\u4eac\u5e02”,”city”:”\u5317\u4eac\u5e02”,”county”:”“,”isp”:”\u7535\u4fe1”,
“country_id”:”86”,”area_id”:”100000”,”region_id”:”110000”,”city_id”:”110000”,
“county_id”:”-1”,”isp_id”:”100017”}}
其中code的值的含义为,0:成功,1:失败。
新浪的接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.192.3.42
返回值
varremote_ip_info={“ret”:1,”start”:”218.192.0.0”,”end”:”218.192.7.255”,”country”:”\u4e2d\u56fd”,”province”:”\u5e7f\u4e1c”,”city”:”\u5e7f\u5dde”,”district”:”“,”isp”:”\u6559\u80b2\u7f51”,”type”:”\u5b66\u6821”,”desc”:”\u5e7f\u5dde\u5927\u5b66\u7eba\u7ec7\u670d\u88c5\u5b66\u9662”};
通过jqry获取相应的数据
$.getScript(‘数据接口',function(){
//新浪:remote_ip_info.country
})
腾讯IP分享计划的地址获取IP所在地:http://ip.qq.com/cgi-bin/searchip?searchip1=ip
用Java调用淘宝ip查询接口查询地域的一个java实例:
importjava.io.BufferedReader;
importjava.io.DataOutputStream;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.UnsupportedEncodingException;
importjava.net.HttpURLConnection;
importjava.net.URL;
/**
*根据IP地址获取详细的地域信息
*@project:personGocheck
*@class:AddressUtils.java
*@author:heguanhuaE-mail:37809893@qq.com
*@date:Nov14,20126:38:25PM
*/
publicclassAddressUtils{
/**
*
*@paramcontent
*请求的参数格式为:name=xxx&pwd=xxx
*@paramencoding
*服务器端请求编码。如GBK,UTF-8等
*@return
*@throwsUnsupportedEncodingException
*/
publicStringgetAddresses(Stringcontent,StringencodingString)
throwsUnsupportedEncodingException{
//这里调用pconline的接口
StringurlStr="http://ip.taobao.com/service/getIpInfo.php";
//从http://whois.pconline.com.cn取得IP所在的省市区信息
StringreturnStr=this.getResult(urlStr,content,encodingString);
if(returnStr!=null){
//处理返回的省市区信息
System.out.println(returnStr);
String[]temp=returnStr.split(",");
if(temp.length<3){
return"0";//无效IP,局域网测试
}
Stringregion=(temp[5].split(":"))[1].replaceAll("\"","");
region=decodeUnicode(region);//省份
Stringcountry="";
Stringarea="";
//Stringregion="";
Stringcity="";
Stringcounty="";
Stringisp="";
for(inti=0;i<temp.length;i++){
switch(i){
case1:
country=(temp[i].split(":"))[2].replaceAll("\"","");
country=decodeUnicode(country);//国家
break;
case3:
area=(temp[i].split(":"))[1].replaceAll("\"","");
area=decodeUnicode(area);//地区
break;
case5:
region=(temp[i].split(":"))[1].replaceAll("\"","");
region=decodeUnicode(region);//省份
break;
case7:
city=(temp[i].split(":"))[1].replaceAll("\"","");
city=decodeUnicode(city);//市区
break;
case9:
county=(temp[i].split(":"))[1].replaceAll("\"","");
county=decodeUnicode(county);//地区
break;
case11:
isp=(temp[i].split(":"))[1].replaceAll("\"","");
isp=decodeUnicode(isp);//ISP公司
break;
}
}
System.out.println(country+"="+area+"="+region+"="+city+"="+county+"="+isp);
returnregion;
}
returnnull;
}
/**
*@paramurlStr
*请求的地址
*@paramcontent
*请求的参数格式为:name=xxx&pwd=xxx
*@paramencoding
*服务器端请求编码。如GBK,UTF-8等
*@return
*/
privateStringgetResult(StringurlStr,Stringcontent,Stringencoding){
URLurl=null;
HttpURLConnectionconnection=null;
try{
url=newURL(urlStr);
connection=(HttpURLConnection)url.openConnection();//新建连接实例
connection.setConnectTimeout(2000);//设置连接超时时间,单位毫秒
connection.setReadTimeout(2000);//设置读取数据超时时间,单位毫秒
connection.setDoOutput(true);//是否打开输出流true|false
connection.setDoInput(true);//是否打开输入流true|false
connection.setRequestMethod("POST");//提交方法POST|GET
connection.setUseCaches(false);//是否缓存true|false
connection.connect();//打开连接端口
DataOutputStreamout=newDataOutputStream(connection
.getOutputStream());//打开输出流往对端服务器写数据
out.writeBytes(content);//写数据,也就是提交你的表单name=xxx&pwd=xxx
out.flush();//刷新
out.close();//关闭输出流
BufferedReaderreader=newBufferedReader(newInputStreamReader(
connection.getInputStream(),encoding));//往对端写完数据对端服务器返回数据
//,以BufferedReader流来读取
StringBufferbuffer=newStringBuffer();
Stringline="";
while((line=reader.readLine())!=null){
buffer.append(line);
}
reader.close();
returnbuffer.toString();
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(connection!=null){
connection.disconnect();//关闭连接
}
}
returnnull;
}
/**
*unicode转换成中文
*
*@authorfanhui2007-3-15
*@paramtheString
*@return
*/
publicstaticStringdecodeUnicode(StringtheString){
charaChar;
intlen=theString.length();
StringBufferoutBuffer=newStringBuffer(len);
for(intx=0;x<len;){
aChar=theString.charAt(x++);
if(aChar=='\\'){
aChar=theString.charAt(x++);
if(aChar=='u'){
intvalue=0;
for(inti=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:
thrownewIllegalArgumentException(
"Malformedencoding.");
}
}
outBuffer.append((char)value);
}else{
if(aChar=='t'){
aChar='\t';
}elseif(aChar=='r'){
aChar='\r';
}elseif(aChar=='n'){
aChar='\n';
}elseif(aChar=='f'){
aChar='\f';
}
outBuffer.append(aChar);
}
}else{
outBuffer.append(aChar);
}
}
returnoutBuffer.toString();
}
//测试
publicstaticvoidmain(String[]args){
AddressUtilsaddressUtils=newAddressUtils();
//测试ip219.136.134.157中国=华南=广东省=广州市=越秀区=电信
Stringip="125.70.11.136";
Stringaddress="";
try{
address=addressUtils.getAddresses("ip="+ip,"utf-8");
}catch(UnsupportedEncodingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
System.out.println(address);
//输出结果为:广东省,广州市,越秀区
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。