java根据ip地址获取城市地域信息
java根据ip地址获取城市地域信息
这里提供两个公开的接口,一个是阿里的,一个是新浪的
http://ip.taobao.com/service/getIpInfo.php?ip=123.139.94.139
http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.192.3.42
接下来上代码,我这里用的是springboot自带的RestTemplate,各位如果没用到可以用HttpURLConnection。案例是在拦截器里获取ip,并查询地址。如果内网测试的话,获取到的是内网ip,通过内网穿透出去访问,可以获取你的公网出口ip,或者吧ip直接写死。
@SpringBootApplication
public class LgmallRestApplication {@Autowiredprivate RestTemplateBuilder builder;@Beanpublic RestTemplate restTemplate() {return builder.build();}public static void main(String[] args) {SpringApplication.run(LgmallRestApplication.class, args);}
}
/*** @Author: nelson* @Description: 商品浏览记录拦截器* @Date: created in 2018/03/31/16:49*/
public class BrowseItemInterceptor implements HandlerInterceptor {@Autowiredprivate RestTemplate restTemplate;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String ip = request.getHeader("x-forwarded-for");if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {// 多次反向代理后会有多个ip值,第一个ip才是真实ipif( ip.indexOf(",")!=-1 ){ip = ip.split(",")[0];}}//新浪查询失败查询阿里String sina = restTemplate.getForObject("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip={ip}", String.class,ip);SinaIpVo sinaIpVo = new Gson().fromJson(sina, SinaIpVo.class);if(sinaIpVo.getRet()!=-1){System.out.println(sinaIpVo.getProvince());System.out.println(sinaIpVo.getCity());}else{String object = restTemplate.getForObject("http://ip.taobao.com/service/getIpInfo.php?ip={ip}", String.class,ip);IpVo ipVo = new Gson().fromJson(object, IpVo.class);// XX表示内网 if(ipVo.getCode()==0 && !ipVo.getAddress().getRegion().equals("XX")){System.out.println(ipVo.getAddress().getRegion());System.out.println(ipVo.getAddress().getCity());}}return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
}
阿里返回结果封装的vo,省去get、set方法,需要其他的属性根据返回json自己扩展。
/*** @Author: nelson* @Description: get city by ip* @Date: created in 2018/03/31/17:40*/
public class IpVo implements Serializable{private Integer code;private Address address;public class Address implements Serializable{private String ip;private String region;private String city;}
}
新浪返回结果封装的vo,省去get、set方法,需要其他的属性根据返回json自己扩展。
/*** @Author: nelson* @Description: get city by ip* @Date: created in 2018/03/31/17:40*/
public class SinaIpVo implements Serializable{private Integer ret;private String province;private String city;
}
关注
如果有问题,请在下方评论,或者加群讨论 200909980
关注下方微信公众号,可以及时获取到各种技术的干货哦,如果你有想推荐的帖子,也可以联系我们的。
java根据ip地址获取城市地域信息相关推荐
- 【转载】 java根据ip地址获取详细地域信息
互联网有很多接口可以实现通过ip查询到具体的位置,如下: 通过淘宝IP地址库获取IP位置 1. 请求接口(GET):http://ip.taobao.com/service/getIpInfo.php ...
- Java 根据IP地址获取城市(ip2region)
根据IP地址获取城市(ip2region) Ip2region是什么? Ip2region特性 99.9%准确率 标准化的数据格式 体积小 查询速度快 多查询客户端的支持 maven集成 小坑 Ip2 ...
- java 根据ip地址获取城市_Java 根据ip地址获取当前城市
maxmind免费数据库maven位置:用来获取所要用的数据库文件(GeoLite2-City.mmdb) org.elasticsearch geolite2-databases 20151029 ...
- java使用高德地图根据IP地址获取城市
话不多说!直奔主题 既然是根据IP,首先肯定是先要获取IP地址的,以下代码是获取IP地址,部署到服务器上去后会获取到公网的IP不是服务器的本机IP:是通过HttpServletRequest获取 注: ...
- 前端获取自己所在的ip_前端使用js根据ip地址获取城市地理位置
标签: 前端使用js根据ip地址获取城市地理位置 一.使用js根据ip获取地址位置 1.在html页面,加入如下代码: var cityCode=returnCitySN.cid; document. ...
- java 根据IP地址获取地理位置
来源:http://www.ipplus360.com/tech/api/ 来源:http://blog.csdn.net/Cryhelyxx/article/details/40862101 精确查 ...
- 根据ip地址获取城市名的几种方法
2019独角兽企业重金招聘Python工程师标准>>> 在某些场景下,可能需要用到根据ip地址获取ip所对应的城市名. 貌似腾讯.百度等开放接口已经失效或者免费服务接口关闭等原因,很 ...
- java通过ip地址获取相应对应的城市
发现了一比较好的本地ip对应地址的库资源文件--做一下笔记. 官方网站 https://dev.maxmind.com/geoip/geoip2/geolite2/ 这里提供了免费的库文件,还有很好的 ...
- JAVA根据IP地址获取省份城市和经纬度(可获取国家名称 淘宝高德API如果是国外IP获取到的为空)
所需jar包maven地址: <!-- 根据ip获取位置 --><dependency><groupId>com.maxmind.geoip2</groupI ...
最新文章
- golang 判断目录是否为空
- excel执行INSERT和UPDATE操作语句
- EMC与地之重新认识地
- 2.1.1进程的概念 组成和特征
- python空格_python 空格
- 项目war包部署到第三方Tomcat,访问路径必须加上项目名称的坑
- pytorch对张量的一些常用处理以及numpy对数组的一些常用处理
- 游戏缺少index.html,index.html
- mybatis使用时遇到的一些问题------模糊查询、处理大于号小于号、相关函数替换空值...
- 1-7docke的网络模式
- JAVA入门级教学之(三元运算符)
- java保存文件到linux指定目录_怎么使用java编程实现linux下全部文件目录的遍历
- Java日历compareTo()方法与示例
- 第八章 数据结构与算法
- .Net Core下使用MQTT协议直连IoT平台
- 【NLP】45个小众而实用的NLP开源字典和工具
- armv6, armv7, armv7s, arm64 的区别
- 网页链接在线提取工具-免费网页链接在线提取软件
- 视频剪辑-mkv文件导入PR
- 2021-07-19普中科技STM-32F1开发板初学