裴大头-秦可爱

裴大头-秦可爱

获取客户端ip的方法

发表于 2022-12-12
裴大头
阅读量 655
更新于 2023-11-30

像本博客中,有天气以及获取留言者的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。

如果有用,记得评论夸奖一下~

评论
来发一针见血的评论吧!
表情
  • 裴大头

    男博主

    IP:济南市

    2023-09-05 18:16

    [坏笑]

    0
    回复
      共0条回复,点击查看
推荐文章
  • JavaScript 的事件循环机制

    1点赞1评论

  • Java 23种设计模式——适配器模式(Adapter)

    1点赞0评论

  • Vue项目代码规范

    1点赞1评论

  • Element UI 级联选择器 el-cascader 实现懒加载和搜索功能

    1点赞0评论

  • Java 23种设计模式——单例模式(Singleton)

    0点赞1评论

Crafted with by Pei你看雪

小破站居然运行了 1009 天访客 26360

© 2023 Pei你看雪鲁ICP备19037910号-2