Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java根据ip地址获取城市地域信息

java根据ip地址获取城市地域信息

作者头像
码农笔录
发布于 2018-06-29 09:54:54
发布于 2018-06-29 09:54:54
4.4K00
代码可运行
举报
文章被收录于专栏:码农笔录码农笔录
运行总次数:0
代码可运行

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直接写死。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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);
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @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自己扩展。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @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自己扩展。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @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;
}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年04月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
php获取主机信息
if(!empty($_SERVER['HTTP_USER_AGENT'])){
botkenni
2019/09/02
3.2K0
Python学习—json模块
json模块 四个常用方法 son.dumps() 将python对象编码成为json的字符串格式(最常用的是字典,列表集合等都可以) json.dump() 将python对象编码成为json的字符串格式并写入文件 json.loads() 将json的字符串格式解码成python对象 json.load() 将文件中的json的字符串格式解码成python对象 例子 import json #将python对象编码成为json的字符串格式 d = {'name':'haha
py3study
2020/01/13
6330
哎,我早就料到你获取IP地址的姿势不对啦!
来源:https://blog.csdn.net/takeurhand/article/details/52512200
用户5224393
2019/10/10
3.3K2
分享几个IP获取地理位置的API接口
全网首发,最全的IP接口,不服来辩!博主找了几个小时的资料,又手动抓取到了几个接口补充进来,应该不能再全了……
用户8099761
2023/05/10
5.8K0
分享几个IP获取地理位置的API接口
全网首发,最全的IP接口,不服来辩!博主找了几个小时的资料,又手动抓取到了几个接口补充进来,应该不能再全了…… 360获取本机IP、地区及运营商 接口地址:http://ip.360.cn/IPShare/info 传递参数:无 返回类型:json 返回值: greetheader:提示语(如上午好、中午好等) nickname:本机已登录的360账号 ip:本机IP地址 location:IP所对应的地理位置
夏时
2018/06/26
55.4K1
PHP实现利用API获取IP所在城市
现在很多IP的接口api很多我例举几个常用的出来: http://int.dpool.sina.com.cn/iplookup/iplookup.php //新浪 http://ip.ws.126.
刺_猬
2018/06/21
3.7K0
SpringBoot自定义拦截器实现IP白名单功能
转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8993331.html
上帝
2018/09/27
2.7K0
SpringBoot自定义拦截器实现IP白名单功能
全网的 IP 归属地显示,带你5分钟加上,就是这么简单!
最近,继新浪微博之后,今日头条、腾讯、抖音、知乎、快手、小红书、百家号等各大平台陆陆续续都上线了"网络用户IP地址显示功能",境外用户显示的是国家,国内的用户显示的省份,而且此项显示无法关闭,归属地强制显示;
一行Java
2022/05/17
2.4K0
全网的 IP 归属地显示,带你5分钟加上,就是这么简单!
手机号码归属和IP地址归属接口整理分享
返回结果原文是带注释的非标准化的json格式的结果,我这个是chrome浏览器JSON-handle插件做处理了,同时还把Unicode编码转为utf-8编码。
后场技术
2020/09/03
2.3K0
手机号码归属和IP地址归属接口整理分享
使用强大的离线IP地址定位库ip2region获取城市信息
   ip2region - 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询,ip2region.db数据库只有数MB,提供了java、php、c、python、nodejs、golang、c#等查询绑定和Binary,B树,内存三种查询算法。
程序员云帆哥
2022/05/12
5.5K0
使用强大的离线IP地址定位库ip2region获取城市信息
nginx代理tomcat不能获取真实ip地址解决方法
本文介绍了nginx服务器代理tomcat系统时,不能获取真实ip地址的解决办法,有需要的朋友参考下。
拓荒者
2019/03/11
2K0
java获取请求的真实ip地址,获取真实ip地址,避免获取代理ip
目录 1 sql 1 sql //客户端ip HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unkn
一写代码就开心
2022/06/10
7.3K0
IP的准确性
最近游戏项目中更新机制有所修改,游戏启动时会从cdn上读取一个文件(约60B),但是后台异常收集系统中发现很多玩家请求不了该文件(libcurl的get请求),返回的error code有很多种,以6、22、28、56居多。
meteoric
2018/11/19
1K0
分享WordPress显示评论者IP的归属地及运营商信息的2种方案
张戈博客之前分享过一篇《WordPress 显示访客 UA 信息:Show UserAgent 纯代码轻度汉化版》的部署教程,算是满足了 WordPress 折腾爱好者的空虚和寂寞,不过这个插件只能显
张戈
2018/03/21
1.7K0
分享WordPress显示评论者IP的归属地及运营商信息的2种方案
php查询IP地址归属等信息
淘宝公司提供了一个很好用的IP地理信息查询接口。 在这里:http://ip.taobao.com/ TaobaoIPQuery2这个类将极大的简化相关的信息查询。
全栈程序员站长
2022/07/15
2.1K0
获取IP地址工具类
该工具类可以获取请求的ip地址 import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; /** * @create: 2022/3/29 * @author: Tony Stark */ public class IpUtils { /** * 获取客户端IP * * @param reques
暴躁的程序猿
2022/04/08
2.3K0
Nginx反向代理后获取用户真实IP地址
问题描述:nginx集群后无法获取用户真实的IP地址,得到的一直都是前端代理服务器。Nginx的地址有2台Nginx服务器,1台代理nacos集群,一台代理vue前端项目。在登录前端页面时一直无法获取到真实的用户IP地址,获取到的是代理前端服务器的地址解决方法:在代理的后端地址中加上如下代码: proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header
Reset
2022/12/19
1.6K0
Java杂谈之获取客户端IP
获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客户端的真实IP地址了。
你呀不牛
2021/05/28
5K0
手把手教你用Java获取IP归属地
前几个月微信公众号上线了IP归属地的功能,后续知乎、抖音等平台纷纷添加了该功能。如果是国内的用户精确到省份,国外用户精确到国家。本文就使用Java实现获取IP归属地。
用户10384376
2023/02/26
2.4K0
手把手教你用Java获取IP归属地
杨校老师课堂之封装工具类【防止重复提交拦截器|全局异常处理器|获取IP及地址】
分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。
杨校
2022/09/23
3430
推荐阅读
相关推荐
php获取主机信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验