Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java根据ip地址获取城市地域信息

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

作者头像
码农笔录
发布于 2018-06-29 09:54:54
发布于 2018-06-29 09:54:54
4.5K00
代码可运行
举报
文章被收录于专栏:码农笔录码农笔录
运行总次数: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手机号码归属和IP地址归属接口整理分享
返回结果原文是带注释的非标准化的json格式的结果,我这个是chrome浏览器JSON-handle插件做处理了,同时还把Unicode编码转为utf-8编码。
后场技术
2020/09/03
2.4K0
手机号码归属和IP地址归属接口整理分享
PHP实现利用API获取IP所在城市
现在很多IP的接口api很多我例举几个常用的出来: http://int.dpool.sina.com.cn/iplookup/iplookup.php //新浪 http://ip.ws.126.
刺_猬
2018/06/21
3.8K0
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
6580
分享几个IP获取地理位置的API接口
全网首发,最全的IP接口,不服来辩!博主找了几个小时的资料,又手动抓取到了几个接口补充进来,应该不能再全了…… 360获取本机IP、地区及运营商 接口地址:http://ip.360.cn/IPShare/info 传递参数:无 返回类型:json 返回值: greetheader:提示语(如上午好、中午好等) nickname:本机已登录的360账号 ip:本机IP地址 location:IP所对应的地理位置
夏时
2018/06/26
56.4K1
PHP 免费IP api接口,常用技巧
在PHP开发过程中,经常会用到获取IP,分析判断的需求. 之前一直用收费API 稳定快速,小项目还好,大项目,每月消耗还是不少的,特此找了一个免费的接口地址. 废话不多,直接上编写好的代码 > error_reporting(0); //屏蔽非致命错误 > header('content-type:application/json;charset=utf8');//网页输出格式 JSON > > $host = "http://ip.taobao.com/service/getIpInfo.php";
杨逸轩
2018/06/14
4K0
IP的准确性
最近游戏项目中更新机制有所修改,游戏启动时会从cdn上读取一个文件(约60B),但是后台异常收集系统中发现很多玩家请求不了该文件(libcurl的get请求),返回的error code有很多种,以6、22、28、56居多。
meteoric
2018/11/19
1.1K0
分享几个IP获取地理位置的API接口
全网首发,最全的IP接口,不服来辩!博主找了几个小时的资料,又手动抓取到了几个接口补充进来,应该不能再全了……
用户8099761
2023/05/10
6.4K0
巧用社工方式获取好友IP地址
常在水边走,哪有不湿鞋的道理。一不小心就会上当受骗,当我们上当受骗后第一时间想到的是怎样获取骗子的个人信息。而这里QQ便是我们骗子的联系媒介。
逍遥子大表哥
2021/12/18
1.6K0
巧用社工方式获取好友IP地址
分享WordPress显示评论者IP的归属地及运营商信息的2种方案
张戈博客之前分享过一篇《WordPress 显示访客 UA 信息:Show UserAgent 纯代码轻度汉化版》的部署教程,算是满足了 WordPress 折腾爱好者的空虚和寂寞,不过这个插件只能显
张戈
2018/03/21
1.8K0
分享WordPress显示评论者IP的归属地及运营商信息的2种方案
使用强大的离线IP地址定位库ip2region获取城市信息
   ip2region - 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询,ip2region.db数据库只有数MB,提供了java、php、c、python、nodejs、golang、c#等查询绑定和Binary,B树,内存三种查询算法。
程序员云帆哥
2022/05/12
6K0
使用强大的离线IP地址定位库ip2region获取城市信息
全网的 IP 归属地显示,带你5分钟加上,就是这么简单!
最近,继新浪微博之后,今日头条、腾讯、抖音、知乎、快手、小红书、百家号等各大平台陆陆续续都上线了"网络用户IP地址显示功能",境外用户显示的是国家,国内的用户显示的省份,而且此项显示无法关闭,归属地强制显示;
一行Java
2022/05/17
2.5K0
全网的 IP 归属地显示,带你5分钟加上,就是这么简单!
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
8.1K0
哎,我早就料到你获取IP地址的姿势不对啦!
来源:https://blog.csdn.net/takeurhand/article/details/52512200
用户5224393
2019/10/10
3.4K2
获取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.6K0
手把手教你用Java获取IP归属地
前几个月微信公众号上线了IP归属地的功能,后续知乎、抖音等平台纷纷添加了该功能。如果是国内的用户精确到省份,国外用户精确到国家。本文就使用Java实现获取IP归属地。
用户10384376
2023/02/26
2.6K0
手把手教你用Java获取IP归属地
SpringBoot自定义拦截器实现IP白名单功能
转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8993331.html
上帝
2018/09/27
2.7K0
SpringBoot自定义拦截器实现IP白名单功能
nginx代理tomcat不能获取真实ip地址解决方法
本文介绍了nginx服务器代理tomcat系统时,不能获取真实ip地址的解决办法,有需要的朋友参考下。
拓荒者
2019/03/11
2K0
部署在docker里的java程序获取真实的用户ip地址
目前我们的服务都是全部docker化,网关zuul和各微服务都部署在docker里,构成了集群。
天涯泪小武
2019/07/08
7.1K1
快递鸟电子面单打印功能基于java
快递鸟电子面单API地址:http://www.kdniao.com/api-eorder
陈灬大灬海
2018/12/05
2.2K0
快递鸟电子面单打印功能基于java
[置顶] 浅谈我为什么选择用Retrofit作为我的网络请求框架
比较AsyncTask、Volley、Retrofit三者的请求时间 使用 单次请求 7个请求 25个请求 AsyncTask 941ms 4539ms 13957ms Volley 560ms 2202ms 4275ms Retrofit2.0 312ms 889ms 1059ms Retrofit2.0 完胜 使用 添加依赖 build.gradle compile ‘com.squareup.retrofit2:retrofit
xiangzhihong
2018/02/02
1.8K0
推荐阅读
相关推荐
手机号码归属和IP地址归属接口整理分享
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验