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