Java获取客户端ip以及根据ip查询到相应的ip地址
来源:互联网 发布:淘宝客服转接设置 编辑:程序博客网 时间:2024/05/17 01:09
package com.xj.console.util;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import javax.servlet.http.HttpServletRequest;import org.apache.commons.lang.StringUtils;import com.alibaba.fastjson.JSONObject;/** * 实现根据客户端传过来的请求获取 * 用户的IP地址;根据IP地址查询到用户登录情况 * @author pyi * */public class IpTest {//这里我们是通过百度的接口获取IP地理位置public static final String httpUrl = "http://apis.baidu.com/apistore/iplookupservice/iplookup";//public static final String httpUrl = "http://ip.taobao.com/service/getIpInfo.php";这个接口要比百度的弱很多/** * 获取IP * @param request * @return */public static String getIp(HttpServletRequest request){//客户端采取代理服务器访问后台,那么通过请求头里面"x-forwarded-for"可以访问到原客户端信息String ip = request.getHeader("x-forwarded-for");if(StringUtils.isBlank(ip)||"unknown".equalsIgnoreCase(ip)){//squid缓存代理机制(根据squid.conf配置文件中forwarded-for的配置)//如果forwarded-for的状态为off则request.getHeader("x-forwarded-for")为unknownip = request.getHeader("Proxy-Client-IP");}if(StringUtils.isBlank(ip)||"unknown".equalsIgnoreCase(ip)){ip = request.getHeader("WL-Proxy-Client-IP");}if(StringUtils.isBlank(ip)||"unknown".equalsIgnoreCase(ip)){//通常情况下,要是没有中间层通过getRemoteAddr的方法就能获取到客户端的IP地址ip = request.getRemoteAddr();}if(StringUtils.isBlank(ip)||"unknown".equalsIgnoreCase(ip)){//在这里我们定义一个最糟糕的情况就是都获取不到IPip = "unknown";}return ip.equals("0:0:0:0:0:0:0:1")?"127.0.0.1":ip;}/** * 将ip传入接口中获取接口传过来的数据 * @param ip * @return */public static String getJsonOb(String ip){BufferedReader br = null;HttpURLConnection conn = null;try{if(StringUtils.isBlank(ip)||"unknown".equals(ip)){return null;}URL url = new URL(httpUrl+"?ip="+ip);conn = (HttpURLConnection) url.openConnection();/* * //设置一些属性,在这里暂时不用 conn.setReadTimeout(2000);//设置读取数据的时间 * conn.setConnectTimeout(2000);//设置建立连接的时间 * conn.setDoInput(true);//设置是否能读取数据 * conn.setDoOutput(true);//设置是否能写入数据 * conn.setRequestMethod("GET");//设置请求的类型 * conn.setUseCaches(false);//设置是否缓存 */conn.setRequestMethod("GET");//访问百度接口要传入一个apikey值conn.setRequestProperty("apikey", "0147bd89c5ec1286db311759d326695c");conn.connect();//建立连接/*在这里一旦采用POST请求发送数据,那么是要用到写入数据 * DataOutputStream dos = new DataOutputStream(conn.getOutputStream());dos.writeBytes("ip"+ip);dos.flush();dos.close();*/br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));StringBuffer sb = new StringBuffer();String line = "";while((line = br.readLine())!=null){sb.append(line);}br.close();return sb.toString();}catch(Exception e){return null;}finally{conn.disconnect();}}public static String getAddressByJsonOb(String jsonOb){if(StringUtils.isBlank(jsonOb)){return "";}JSONObject json = JSONObject.parseObject(jsonOb);if("0".equals(json.get("errNum").toString())){ StringBuffer sb = new StringBuffer(); JSONObject optJson = json.getJSONObject("retData"); sb.append(optJson.getString("country"))//国家 //.append(optJson.getString("area"))//地区(华中) .append(optJson.getString("province"))//省份 .append(optJson.getString("city"))//市区 .append(optJson.getString("district"));//地区 return sb.toString();}else{return "";}}public static void main(String[] args) {String add = getAddressByJsonOb(getJsonOb("113.57.168.243"));System.out.println(add);//中国湖北武汉江夏}}
1 0
- Java获取客户端ip以及根据ip查询到相应的ip地址
- java获取客户端以及代理IP地址
- JAVA服务器端获取客户端远程地址,根据IP获取远程地址,各IP地址查询接口比较
- 根据传入接口名获取相应的ip地址
- 根据IP地址获取IP的详细信息
- java根据ip获取ip所在地址的类
- java 获取客户端ip地址
- Java获取客户端IP地址
- java获取客户端IP地址
- Java获取客户端IP地址
- Java 获取客户端IP地址
- Java获取客户端IP地址
- java获取客户端IP地址
- java--获取客户端ip地址
- java获取客户端IP地址
- java 获取客户端IP地址
- java获取客户端ip地址
- java获取客户端ip地址
- mysql-开发环境为VS2013的嵌入式mysql
- poj3281——Dining(网络流+拆点)
- (笔记)运算符和表达式
- abs()与fabs()
- AFN如何获取并解析XML
- Java获取客户端ip以及根据ip查询到相应的ip地址
- Codeforces Round #347 (Div. 1) E
- 12、Java入门—将一数组乱序排列的三种方法 (快速洗牌的小算法)
- 对话框显示加载的滑动图片
- Android开发需要掌握的技能点总结(下)
- Web——域名
- jquery介绍
- CodeForces - 237C Primes on Interval 【二分】
- Ubuntu 下安装Anaconda软件