像本博客中,有天气以及获取留言者的ip地址,之前一直使用的是搜狐的api,但最近频频报错403,无奈自己在后端写了一个。
首先先说一下常规的js通过api获取ip的方法:
搜狐接口:
<script src="[pv.sohu.com/cityjson...](http://pv.sohu.com/cityjson?ie=utf-8)"></script>
<script type="text/javascript">
document.write(returnCitySN["cip"]+','+returnCitySN["cname"]) // xxx.xxx.xxx.xxx, xx省xx市
</script>
javascript
新浪接口:
<!--获取接口数据,注意charset -->
<script
type="text/javascript"
src="[counter.sina.com.cn/...](http://counter.sina.com.cn/ip/)"
charset="gb2312">
</script>
<script
type="text/javascript">
//输出接口数据中的IP地址
document.writeln("IP地址:"+ILData[0]+"<br/>");
//输出接口数据中的IP地址的类型
document.writeln("地址类型:"+ILData[1]+"<br/>");
//输出接口数据中的IP地址的省市
document.writeln("地址类型:"+ILData[2]+"<br/>");
//输出接口数据中的IP地址的
document.writeln("地址类型:"+ILData[3]+"<br/>");
//输出接口数据中的IP地址的运营商
document.writeln("地址类型:"+ILData[4]+"<br/>");
</script>
javascript
如果使用这两个api不行的话,可以考虑自己整一个,先看一下我开放出来的一个:
http://pnkx.top:8068/open/getIp
{
"msg": "123.232.10.234", // 返回的IP
"code": 200 // 成功的状态码
}
json
我这是用的java语言、springboot框架:
工具类代码:
private String getIpAddress(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip != null && !"".equals(ip) && !"unknown".equalsIgnoreCase(ip)) {
if (ip.indexOf(",") > 0) {
ip = ip.substring(0, ip.indexOf(","));
}
if (ip.equals("127.0.0.1")) {
//根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (Exception
e) {
e.printStackTrace();
}
ip = inet.getHostAddress();
}
}
if (request.getHeader("X-Real-IP") != null && !"".equals(request.getHeader("X-Real-IP")) && !"unknown".equalsIgnoreCase(request.getHeader("X-Real-IP"))) {
ip = request.getHeader("X-Real-IP");
}
if (request.getHeader("Proxy-Client-IP") != null && !"".equals(request.getHeader("Proxy-Client-IP")) && !"unknown".equalsIgnoreCase(request.getHeader("Proxy-Client-IP"))) {
ip = request.getHeader("Proxy-Client-IP");
}
if (request.getHeader("WL-Proxy-Client-IP") != null && !"".equals(request.getHeader("WL-Proxy-Client-IP")) && !"unknown".equalsIgnoreCase(request.getHeader("WL-Proxy-Client-IP"))) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
log.info("用户ip:" + ip);
return ip;
}
java
如果有博主不太了解java的,也可以查询下其他语言的获取客户端ip的方法,大同小异。实在不行也可以使用我开放出来的api。
如果有用,记得评论夸奖一下~