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); //输出结果为:广东省,广州市,越秀区 } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。