互联网有很多接口可以实现通过ip查询到具体的位置,如下:
通过淘宝IP地址库获取IP位置
1.
请求接口(GET):http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]
2. 响应信息:(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
3. 返回数据格式:
{"code":0,"data":{"ip":"210.75.225.254","country":"u4e2du56fd","area":"u534eu5317",
"region":"u5317u4eacu5e02","city":"u5317u4eacu5e02","county":"","isp":"u7535u4fe1",
"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
返回值
var remote_ip_info =
{"ret":1,"start":"218.192.0.0","end":"218.192.7.255","country":"u4e2du56fd","province":"u5e7fu4e1c","city":"u5e7fu5dde","district":"","isp":"u6559u80b2u7f51","type":"u5b66u6821","desc":"u5e7fu5ddeu5927u5b66u7ebau7ec7u670du88c5u5b66u9662"};
通过jqry 获取相应的数据
$.getScript('数据接口',function(){
//新浪:remote_ip_info.country
})
腾讯IP分享计划的地址获取IP所在地:
用Java调用淘宝ip查询接口查询地域的一个java实例:
- import
java.io.BufferedReader; - import
java.io.DataOutputStream; - import
java.io.IOException; - import
java.io.InputStreamReader; - import
java.io.UnsupportedEncodingExcep tion; - import
java.net.HttpURLConnection; - import
java.net.URL; -
- public
class AddressUtils { -
-
public String getAddresses(String content, String encodingString) -
throws UnsupportedEncodingExcep tion { -
// 这里调用pconline的接口 -
String urlStr = "http://ip.taobao.com/service/getIpInfo.php"; -
// 从http://whois.pconline.com.cn取得IP所在的省市区信息 -
String returnStr = this.getResult(urlStr, content, encodingString); -
if (returnStr null)!= { -
// 处理返回的省市区信息 -
System.out.println(returnStr); -
String[] temp = returnStr.split(","); -
if(temp.length<</span>3){ -
return "0";//无效IP,局域网测试 -
} -
String region = (temp[5].split(":"))[1].replaceAll(""", ""); -
region = decodeUnicode(region);// 省份 -
-
String country = ""; -
String area = ""; -
// String region = ""; -
String city = ""; -
String county = ""; -
String isp = ""; -
for ( inti 0;= i < temp.length; i++) { -
switch (i) { -
case 1: -
country = (temp[i].split(":"))[2].replaceAll(""", ""); -
country = decodeUnicode(country);// 国家 -
break; -
case 3: -
area = (temp[i].split(":"))[1].replaceAll(""", ""); -
area = decodeUnicode(area);// 地区 -
break; -
case 5: -
region = (temp[i].split(":"))[1].replaceAll(""", ""); -
region = decodeUnicode(region);// 省份 -
break; -
case 7: -
city = (temp[i].split(":"))[1].replaceAll(""", ""); -
city = decodeUnicode(city);// 市区 -
break; -
case 9: -
county = (temp[i].split(":"))[1].replaceAll(""", ""); -
county = decodeUnicode(county);// 地区 -
break; -
case 11: -
isp = (temp[i].split(":"))[1].replaceAll(""", ""); -
isp = decodeUnicode(isp); // ISP公司 -
break; -
} -
} -
-
System.out.println(country+"="+area+"="+region+"="+city+"="+county+"="+isp); -
return region; -
} -
return null; -
} -
-
private 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);// 是否打开输出流 true|false -
connection.setDoInput(true);// 是否打开输入流true|false -
connection.setRequestMethod("POST");// 提交方法POST|GET -
connection.setUseCaches(false);// 是否缓存true|false -
connection.connect();// 打开连接端口 -
DataOutputStream out = new DataOutputStream(connection -
.getOutputStream());// 打开输出流往对端服务器写数据 -
out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx -
out.flush();// 刷新 -
out.close();// 关闭输出流 -
BufferedReader reader = new BufferedReader( newInputStreamReader( -
connection.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据 -
// ,以BufferedReader流来读取 -
StringBuffer buffer = new StringBuffer(); -
String line = ""; -
while ((line null)= reader.readLine()) != { -
buffer.append(line); -
} -
reader.close(); -
return buffer.toString(); -
} catch (IOException e) { -
e.printStackTrace(); -
} finally { -
if (connection null)!= { -
connection.disconnect();// 关闭连接 -
} -
} -
return null; -
} -
-
public static String decodeUnicode(String theString) { -
char aChar; -
int len = theString.length(); -
StringBuffer outBuffer = new StringBuffer(len); -
for ( intx 0;= x < len;) { -
aChar = theString.charAt(x++); -
if (aChar '\')== { -
aChar = theString.charAt(x++); -
if (aChar 'u')== { -
int value 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) + '0';aChar - -
break; -
case 'a': -
case 'b': -
case 'c': -
case 'd': -
case 'e': -
case 'f': -
value = (value << 4) + 10+ 'a';aChar - -
break; -
case 'A': -
case 'B': -
case 'C': -
case 'D': -
case 'E': -
case 'F': -
value = (value << 4) + 10+ 'A';aChar - -
break; -
default: -
throw new IllegalArgumentException ( -
"Malformed encoding." -
} -
} -
outBuffer.append((char) value); -
} else { -
if (aChar 't')== { -
aChar = ' '; -
} else if (aChar 'r')== { -
aChar = ' '; -
} else if (aChar 'n')== { -
aChar = ' '; -
} else if (aChar 'f')== { -
aChar = 'f'; -
} -
outBuffer.append(aChar); -
} -
} else { -
outBuffer.append(aChar); -
} -
} -
return outBuffer.toString(); -
} -
// 测试 -
public static void main(String[] args) { -
AddressUtils addressUtils = new AddressUtils(); -
// 测试ip 219.136.134.157 中国=华南=广东省=广州市=越秀区=电信 -
String ip = "125.70.11.136"; -
String address = ""; -
try { -
address = addressUtils.getAddresses("ip="+ip, "utf-8"); -
} catch (UnsupportedEncodingExcep tion e) { -
// TODO Auto-generated catch block -
e.printStackTrace(); -
} -
System.out.println(address); -
// 输出结果为:广东省,广州市,越秀区 -
} -
}