博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java根据ip地址获取详细地域信息
阅读量:4071 次
发布时间:2019-05-25

本文共 8180 字,大约阅读时间需要 27 分钟。

本文章转自:

互联网有很多接口可以实现通过ip查询到具体的位置,如下:

通过淘宝IP地址库获取IP位置

  1. 请求接口(GET):地址字串]
  2. 响应信息:(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
  3. 返回数据格式:
    {“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:失败。

新浪的接口 :

返回值
var remote_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所在地:

用java调用淘宝ip查询接口查询地域的一个java实例:

package method;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;public class AddressUtils {
/** * * @param content * 请求的参数 格式为:name=xxx&pwd=xxx * @param encoding * 服务器端请求编码。如GBK,UTF-8等 * @return * @throws UnsupportedEncodingException */ public String getAddresses(String content, String encodingString) throws UnsupportedEncodingException { // 这里调用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 < 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 = ""; String add=""; for (int i = 0; i < temp.length; i++) { switch (i) { case 1: country = (temp[i].split(":"))[2].replaceAll("\"", ""); country = decodeUnicode(country);// 国家 if(country.length()>0) add+=country+" "; break; case 3: area = (temp[i].split(":"))[1].replaceAll("\"", ""); area = decodeUnicode(area);// 地区 if(area.length()>0) add+=area+" "; break; case 5: region = (temp[i].split(":"))[1].replaceAll("\"", ""); region = decodeUnicode(region);// 省份 if(region.length()>0) add+=region+" "; break; case 7: city = (temp[i].split(":"))[1].replaceAll("\"", ""); city = decodeUnicode(city);// 市区 if(city.length()>0) add+=city+" "; break; case 9: county = (temp[i].split(":"))[1].replaceAll("\"", ""); county = decodeUnicode(county);// 地区 if(county.length()>0) add+=county+" "; break; case 11: isp = (temp[i].split(":"))[1].replaceAll("\"", ""); isp = decodeUnicode(isp); // ISP公司 if(isp.length()>0) add+=isp; break; } } return add; } return null; } /** * @param urlStr * 请求的地址 * @param content * 请求的参数 格式为:name=xxx&pwd=xxx * @param encoding * 服务器端请求编码。如GBK,UTF-8等 * @return */ 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(new InputStreamReader( connection.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 (connection != null) { connection.disconnect();// 关闭连接 } } return null; } /** * unicode 转换成 中文 * * @author fanhui 2007-3-15 * @param theString * @return */ public static String decodeUnicode(String theString) { char aChar; int len = theString.length(); StringBuffer outBuffer = new StringBuffer(len); for (int x = 0; x < len;) { aChar = theString.charAt(x++); if (aChar == '\\') { aChar = theString.charAt(x++); if (aChar == 'u') { int value = 0; for (int i = 0; i < 4; i++) { aChar = theString.charAt(x++); if ('0' <= aChar && aChar <= '9') value = (value << 4) + aChar - '0'; else if ('a' <= aChar && aChar <= 'f') value = (value << 4) + 10 + aChar - 'a'; else if ('A' <= aChar && aChar <= 'F') value = (value << 4) + 10 + aChar - 'A'; else { throw new IllegalArgumentException( "Malformed encoding."); } } outBuffer.append((char) value); } else { if (aChar == 't') { aChar = '\t'; } else if (aChar == 'r') { aChar = '\r'; } else if (aChar == 'n') { aChar = '\n'; } else if (aChar == 'f') { aChar = '\f'; } outBuffer.append(aChar); } } else { outBuffer.append(aChar); } } return outBuffer.toString(); }}

测试

package test;import java.io.UnsupportedEncodingException;import method.AddressUtils;public class ipAddressTest {
public static void main(String[] args) { AddressUtils addressUtils = new AddressUtils(); String ip = "61.157.96.193"; String address = ""; try{ address = addressUtils.getAddresses("ip="+ip, "UTF-8"); }catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println(address); }}

输出:

{“code”:0,”data”:{“country”:”\u4e2d\u56fd”,”country_id”:”CN”,”area”:”\u897f\u5357”,”area_id”:”500000”,”region”:”\u56db\u5ddd\u7701”,”region_id”:”510000”,”city”:”\u7ef5\u9633\u5e02”,”city_id”:”510700”,”county”:”“,”county_id”:”-1”,”isp”:”\u7535\u4fe1”,”isp_id”:”100017”,”ip”:”61.157.96.193”}}
中国 西南 四川省 绵阳市 电信

转载地址:http://iehji.baihongyu.com/

你可能感兴趣的文章
js学习六-闭包
查看>>
Django入门
查看>>
宏内核与微内核、Linux内核与Unix内核的区别
查看>>
Django视图模板
查看>>
简述Session 、Cookie、cache 区别
查看>>
CROS实现跨域时授权问题(401错误)的解决
查看>>
Hadoop之基础篇
查看>>
【转】alpha版、beta版、rc版的意思
查看>>
测试方法
查看>>
常见的图片格式及特点
查看>>
Android自定义View仿QQ计步器
查看>>
最简单易懂的设计模式——工厂模式
查看>>
最简单易懂的设计模式——建造者模式
查看>>
Android 解决TextView设置文本和富文本SpannableString自动换行留空白问题
查看>>
最完整的Java IO流学习总结
查看>>
Android开发中Button按钮绑定监听器的方式完全解析
查看>>
解决ScrollView嵌套ListView后,进入页面不从顶部开始
查看>>
基于Rxjava2的事件总线:Rxbus
查看>>
Android6.0动态权限获取框架:RxPermission(基于RxJava2)
查看>>
Android中解决华为手机设置PopupWindow半透明背景无效果问题
查看>>