java通过ip地址获取地理位置信息
2017-11-07 11:50
597 查看
第一步,要先获取到客户端的ip地址(百度一大堆,在这就不多说了了,想了解的可以自行百度):
这里需要注意的是本地开启apache服务的时候,当你调用这个方法的时候(包括访问jsp或者是html进行异步请求),获取到的ip还是内网的ip,并不是真实ip。不过没关系,当项目上生产、放服务器上的时候是可以获取到真实的ip的。
第二步,ip到手了,找个第三方的接口吧,百度,高德的都可以,高德返回的json比较好解析。
在这之前要创建链接
这里需要注意的是本地开启apache服务的时候,当你调用这个方法的时候(包括访问jsp或者是html进行异步请求),获取到的ip还是内网的ip,并不是真实ip。不过没关系,当项目上生产、放服务器上的时候是可以获取到真实的ip的。
public static String getIp(HttpServletRequest request){ String ipAddress = request.getHeader("x-forwarded-for"); if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){ //根据网卡取本机配置的IP InetAddress inet=null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ipAddress= inet.getHostAddress(); } } //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15 if(ipAddress.indexOf(",")>0){ ipAddress = ipAddress.substring(0,ipAddress.indexOf(",")); } } return ipAddress; }
第二步,ip到手了,找个第三方的接口吧,百度,高德的都可以,高德返回的json比较好解析。
在这之前要创建链接
/** * 读取 * @param rd * @return * @throws IOException */ private static String readAll(Reader rd) throws IOException { StringBuilder sb = new StringBuilder(); int cp; while ((cp = rd.read()) != -1) { sb.append((char) cp); } return sb.toString(); } /** * 创建链接 * @param url * @return * @throws IOException * @throws JSONException */ private static JSONObject readJsonFromUrl(String url) throws IOException, JSONException { InputStream is = new URL(url).openStream(); try { BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); String jsonText = readAll(rd); JSONObject json = new JSONObject(jsonText); return json; } finally { is.close(); } } /** * 百度获取城市信息 * @param ip * @return * @throws JSONException * @throws IOException */ public static String baiduGetCityCode() throws JSONException, IOException{ String ip=""; //百度ak,自己去申请就可以 String ak=""; //这里调用百度的ip定位api服务 详见 http://api.map.baidu.com/lbsapi/cloud/ip-location-api.htm JSONObject json = readJsonFromUrl("http://api.map.baidu.com/location/ip?ip="+ip+"&ak="+ak+"&coor=bd09ll"); Object obj = ((JSONObject) json.get("content")).get("address_detail"); String s=obj.toString(); JSONObject j = new JSONObject(s); int city_code=(int) j.get("city_code"); String code=String.valueOf(city_code); return code; } /** * 高德获取城市信息 * @return * @throws JSONException * @throws IOException */ public static String guideGetCityCode() throws JSONException, IOException{ String ip=""; //高德key String key=""; JSONObject json = readJsonFromUrl("http://restapi.amap.com/v3/ip?ip="+ip+"&key="+key+""); //String province = (String) json.get("province"); // String city = (String) json.get("city"); String adcode = (String) json.get("adcode"); return adcode; }
相关文章推荐
- java根据ip地址从第三方接口获取详细的地理位置地域信息
- Java获取客户端IP地址、MAC地址,根据IP获取地理位置信息代码
- java通过Ip地址获取地理位置
- 通过IP地址获取地理位置信息
- 通过基站信息(LAC,CID)调用google的json接口获取地理位置信息的Java代码
- 通过html5获取地理位置信息
- 腾讯新浪通过IP地址获取当前地理位置(省份)的接口
- 通过poi获取到了商店的地理位置之后,如何获取商店的详细信息。是需要商店提供还是地图提供
- Android通过百度地图API用Service和Alarm在后台定时获取地理位置信息
- 通过GeoIP2分析访问者IP获取地理位置信息
- 腾讯新浪通过IP地址获取当前地理位置(省份)的接口
- JSP通过IP获取用户(客户端)的地理位置信息
- 通过GeoIP2分析访问者IP获取地理位置信息
- Android通过百度地图API用Service和Alarm在后台定时获取地理位置信息
- Android 通过经纬度获取地理位置信息
- java 根据IP地址获取地理位置
- 通过IP地址获取省份城市位置信息
- 通过经纬度获取地理位置信息
- java调用百度地图API通过URL根据地理位置中文处理返回值获取经纬度
- 通过ip获取地理位置信息