最近我们发现各大社交平台都出现了一个新的功能:IP属地。
比如某乎:
这个IP属地是怎么做到的呢?今天我来教教你,保证你看完直呼Easy~
百度搜索
打开百度,搜索IP,你就能看到你当前的IP地址,类似这样:
细心的朋友肯定发现了,下面有个网站:www.ip138.com,没错,百度这个IP的搜索是基于ip138
提供的功能。
既然百度能用,那我们能不能也借来使使呢?
网页结构
那肯定可以啊,我们先来分析下网页结构:
- 浏览器打开 https://2022.ip138.com/
- 看下网页的结构:
可以发现,在第一个 p标签里包含了我们所需要的ip和属地信息。
接下来我们只要拿到这个网页的结构,直接解析出来我们想要的数据即可。
开始干活
后端我们是基于Jsoup的html解析来实现,首先是新建一个普通的Springboot项目,然后加入下面的依赖:
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.14.3</version>
</dependency>
然后就可以写工具方法啦,简单的几行代码即可完成,大家可以直接 Copy我的,包导入我都帮你准备好了:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;private void getIpInfo() {try {Document document = Jsoup.connect("https://2022.ip138.com/").get();String ip = document.selectXpath("/html/body/p[1]/a[1]").get(0).text(); // 通过 Xpath 直接获取了网页里面的内容String ipInfo = document.selectXpath("/html/body/p[1]").get(0).text();String city = ipInfo.substring(ipInfo.lastIndexOf("来自:") + 3);System.out.println(ip);System.out.println(city);} catch (IOException e) {e.printStackTrace();}
}
通过运行这个方法,可以看到,控制台打印了IP和城市信息,也就是我们想要的IP属地信息
啦!
是不是非常 Easy?
在你的项目里,你可以在登录的时候记录当前登录用户的IP和登录地点,也可以在用户发表文章和评论的时候显示出他的IP属地,非常实用哦~
其他获取IP和城市的API:
- 获取公网IP:http://pv.sohu.com/cityjson?ie=utf-8
- 获取城市信息: https://sp1.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=64.104.44.107&resource_id=5809
(其中64.104.44.107 是你的ip)