方法一:利用js访问搜狐的API(http://pv.sohu.com/cityjson),该方法比较简单,适用各个浏览器{
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
IP:returnCitySN["cip"];
IP_address:returnCitySN["cname"];
}
方法二:阿里云教程https://help.aliyun.com/knowledge_detail/40535.html
方法三:参考了http://ask.csdn.net/questions/203035{
public static String getIpAdrress(HttpServletRequest request){
String Xip = request.getHeader("X-Real-IP");
String XFor = request.getHeader("HTTP_X-Forwarded-For");
System.out.println("Xip:"+Xip+"--"+"XFor:"+XFor);
if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)){
//多次反向代理后会有多个ip值,第一个ip才是真实ip
int index = XFor.indexOf(",");
if(index != -1){
return XFor.substring(0,index);
}else{
return XFor;
}
}
XFor = Xip;
if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)){
return XFor;
}
if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
XFor = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
XFor = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
XFor = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
XFor = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
XFor = request.getRemoteAddr();
}
return XFor;
}
}
其实方法二和方法三属于同一方法,借花献佛附上源码。
注:本文仅用作记录学习,感谢阿里云和原创作者提供思路和技术分享。