最近最项目添加日志的时候为了便于维护以及从用户安全角度来看需要添加用户登录的ip以及皮的归属地字段,本来想用java直接获取用户的局域网的ip,但是考虑到种种原因,还是依靠各大门户的ip查询结果作为获取ip的方式。废话到此结束,老样子,先来思路。
既然想要通过网站获取ip,那么国内有哪些网站呢,百度输入ip就能获取到好多的网站,咱们就以http://www.ip138.com/为例吧!
可以看出上图中红色框框的就是我们想要的信息,那么我们调试一下,看看网页的结构(浏览器内按F12):
可以看得出来:我们需要的ip以及归属地信息在内嵌的网页(http://2018.ip138.com/ic.asp)里面,可以看到这个网页的结构很简单,那么我们只需要将页面中的<center>标签中内容拿出来就可以了,好了思路到此结束,上代码!
代码以及实现
需要的jar:jsoup(作为解析网页的辅助jar,确实很好用),需要的直接拷贝下面的到你们的pom.xml文件中就好了
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
结合jsoup编写工具类:
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;
/**
* {@用于抓取ip 地理位置信息}
* @author ahk
* 辅助类的jar:jsoup-1.8.3.jar
*/
public class GetIp {
public static String getIpAndAdress() throws IOException {
Document document = Jsoup.connect("http://2018.ip138.com/ic.asp").get();
Elements links = document.getElementsByTag("center");
String info = links.text();
String ip = info.substring(info.indexOf("[")+1, info.indexOf("]"));
String adress = info.substring(info.lastIndexOf(":")+1);
return ip+"==="+adress;
}
}
我们在要获取ip的后台只需要调用getIpAndAdress()方法就好了,但是鉴于有些童鞋感觉返回信息有问题,那么我们就将ip与归属地分别写成不同的方法来获取就好了:
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;
/**
* {@用于抓取ip 地理位置信息}
* @author ahk
* 辅助类的jar:jsoup-1.8.3.jar
*/
public class GetIp {
public static String getIp() throws IOException {
Document document = Jsoup.connect("http://2018.ip138.com/ic.asp").get();
Elements links = document.getElementsByTag("center");
String info = links.text();
String ip = info.substring(info.indexOf("[")+1, info.indexOf("]"));
return ip;
}
public static String getAdress() throws IOException {
Document document = Jsoup.connect("http://2018.ip138.com/ic.asp").get();
Elements links = document.getElementsByTag("center");
String info = links.text();
String address = info.substring(info.lastIndexOf(":")+1);
return address;
}
/* public static void main(String[] args) {
try {
System.out.println(getIp());
System.out.println(getAdress());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
*/
}
到此,获取ip以及ip归属地就完完整整的,毫无保留的展现给你们了,拿走吧,觉得好用,就点个赞,不用客气!