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 { @Autowired private RestTemplateBuilder builder; @Bean public 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 { @Autowired private RestTemplate restTemplate; @Override public 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才是真实ip if( 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; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public 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
关注下方微信公众号,可以及时获取到各种技术的干货哦,如果你有想推荐的帖子,也可以联系我们的。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Xlua使用教程、攻略
Xlua 使用指南 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分享、心创新!助力快速理解、并使用 Xlua 完成与 C# 的交互为新手节省宝贵的时间,避免采坑! Chinar 教程效果: 1 Quick Drag —— 快速拖拽 支持 May Be —— 搞开发,总有一天要做的事! 全文高清图片,点击即可放大观看 (很多人竟然不知道) 1 Quick Drag —— 快速拖拽 Quick name —— 快速手势名(可自定义) 支持 May Be —— 搞开发,总有一天要做的事! 拥有自己的服务器,无需再找攻略! Chinar 提供一站式教程,闭眼式创建!为新手节省宝贵时间,避免采坑! 先点击领取 —— 阿里全产品优惠卷 (享受最低优惠) 1 —— 云服务器超全购买流程 (新手必备!) 2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!) 3—— Windows 服务器配置、运行、建站一条龙 ! 4 —— Linux 服务器配置、运行、建站一条龙 !...
- 下一篇
网站调用支付宝进行支付-Java后台调用支付宝支付
网站调用支付宝进行支付-Java后台调用支付宝支付 最近公司一个产品用到了打赏支付,其中一个是支付宝,记录一下java后台调用支付宝的过程付代码。本文讲的是使用沙箱环境(支付宝提供的一种开发专用模式,不要实际支付,可以走通整个流程)。 一、准备工作 1.首先要到 蚂蚁金服开发者中心 注册商家账户,并认证。 2.下载java版的sdk和demo sdk&demo下载地址 3.将sdk加入到项目中,在项目根路径下新建libs文件夹,将jar包复制进去,我这里使用的是gradle,如果各位使用的是maven,请自行修改。 compile fileTree(dir:'libs',include:['*.jar']) compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0' //谷歌json相关的包,可以用其他的 4.公钥、私钥的生成。生成公钥、私钥官方教程 ,按照官网教程操作,很简单的,这里就不上图片了。生成完之后将你的公钥要上传上去,具体位置看图片。 这里写图片描述 二、开发接口 1、因为开发环境是使用...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Linux系统CentOS6、CentOS7手动修改IP地址
- Red5直播服务器,属于Java语言的直播服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路