java中如何获取公网IP

举报
穆雄雄 发表于 2022/12/20 18:50:00 2022/12/20
【摘要】 大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。最近这几天遇到了个需求,对方让我们将请求地址输出来,看看接口请求的数据是他们是他们的。因为对方的回调接口总是没有数据过来,还没好气的说是我们的代码问题,你说服气不服气。于是我们就写了个获取请求IP的方法,结合网上以及自己整理下,一共有三种方式,大家可以试试,我现在用的是第二种方式:第一种方式: public static String ge...

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。

image.png

最近这几天遇到了个需求,对方让我们将请求地址输出来,看看接口请求的数据是他们是他们的。因为对方的回调接口总是没有数据过来,还没好气的说是我们的代码问题,你说服气不服气。

于是我们就写了个获取请求IP的方法,结合网上以及自己整理下,一共有三种方式,大家可以试试,我现在用的是第二种方式:
第一种方式:

 public static String getIP() {
        HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
        String ip = "";
        if (request.getHeader("x-forwarded-for") == null) {
            ip = request.getRemoteAddr();
        } else {
            ip = request.getHeader("x-forwarded-for");
        }
        return ip;
    }

这个本地请求的话,结果是:127.0.0.1,结果是没有问题的,服务器请求也没有问题。

第二中方式:

 public static String getIp2() {
        HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
        String ip = request.getHeader("X-Forwarded-For");
        if (Strings.isNotBlank(ip)) {
            int index = ip.indexOf(",");
            if (index != -1) {
                return ip.substring(0, index);
            } else {
                return ip;
            }
        }
        ip = request.getHeader("X-Real-IP");
        if (Strings.isNotBlank(ip)) {
        //判断不是空的
            return ip;
        }
        return request.getRemoteAddr();
    }


这个代码是在网上找的,然后我自己又改了一遍,也没有问题。本地调用输出的结果是127.0.0.1

第三种方式:

public static String getGongWangIp() {
  String ip = “http://pv.sohu.com/cityjson?ie=utf-8;
  String inputLine = “”;
  String read = “”;
  String toIp = “”;
  try {
    URL url = new URL(ip);
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
    while ((read = in.readLine()) != null) {
    inputLine += read;
    }
    String ObjJson = inputLine.substring(inputLine.indexOf(=) + 1, inputLine.length() - 1);
    JSONObject jsonObj = JSON.parseObject(ObjJson);
    System.out.println(“到了请求公网的接口,jsonObj的值是:”+jsonObj.toJSONString());
    toIp = jsonObj.getString(“cip”);
  } catch (Exception e) {
  	toIp = "";

    }

    return toIp;

}

这种方式是获取公网ip,在本地的话,会获取的是你本地局域网的地址,在服务器上的话,获取的是你服务器上的地址,可能在比的地方会用到吧,但是我没有用到。

今天的总结就到这里了。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。