返回顶部
首页 > 资讯 > 精选 >java怎么通过IP解析地理位置
  • 311
分享到

java怎么通过IP解析地理位置

2023-07-05 03:07:26 311人浏览 八月长安
摘要

这篇文章主要讲解了“java怎么通过IP解析地理位置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java怎么通过IP解析地理位置”吧!java通过IP解析地理位置在项目开发中,需要在登录日

这篇文章主要讲解了“java怎么通过IP解析地理位置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java怎么通过IP解析地理位置”吧!

    java通过IP解析地理位置

    项目开发中,需要在登录日志或者操作日志中记录客户端ip所在的地理位置。

    目前根据ip定位地理位置的第三方api有好几个,淘宝、新浪、百度等,这三种其实也有些缺点的:

    • 淘宝,开始几次可以成功根据ip获取对应地理位置,但后面就莫名其妙开始不行,直接通过浏览器获取又可以;

    • 新浪,之前一直可以,但最近不知道为什么不行了,访问直接报错(可能api修改了或者取消了吧);

    • 百度,需要申请百度地图开发者平台的开发者账号,请求时接口中需要加上百度提供的秘钥等信息,好像不能定位国外的ip,但是针对国内的可以使用。

    获取IP地址

    java IP地址工具类,java IP地址获取,java获取客户端IP地址

    import java.net.Inet4Address;import java.net.InetAddress;import java.net.NetworkInterface;import java.util.Enumeration; import javax.servlet.Http.httpservletRequest; public class IpUtils { private static final String[] HEADERS = {         "X-Forwarded-For",        "Proxy-Client-IP",        "WL-Proxy-Client-IP",        "HTTP_X_FORWARDED_FOR",        "HTTP_X_FORWARDED",        "HTTP_X_CLUSTER_CLIENT_IP",        "HTTP_CLIENT_IP",        "HTTP_FORWARDED_FOR",        "HTTP_FORWARDED",        "HTTP_VIA",        "REMOTE_ADDR",        "X-Real-IP"};public static boolean isEmptyIp(final String ip){        return (ip == null || ip.length() == 0 || ip.trim().equals("") || "unknown".equalsIgnoreCase(ip));    }public static boolean isNotEmptyIp(final String ip){        return !isEmptyIp(ip);    }    public static String getIpAddress(HttpServletRequest request) {    String ip = "";    for (String header : HEADERS) {            ip = request.getHeader(header);            if(isNotEmptyIp(ip)) {             break;            }        }        if(isEmptyIp(ip)){        ip = request.getRemoteAddr();        }        if(isNotEmptyIp(ip) && ip.contains(",")){        ip = ip.split(",")[0];        }        if("0:0:0:0:0:0:0:1".equals(ip)){            ip = "127.0.0.1";        }        return ip;    }        public String getLocalHostIP() throws Exception{Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces();String localHostAddress = "";while(allNetInterfaces.hasMoreElements()){NetworkInterface networkInterface = allNetInterfaces.nextElement();Enumeration<InetAddress> address = networkInterface.getInetAddresses();while(address.hasMoreElements()){InetAddress inetAddress = address.nextElement();if(inetAddress != null && inetAddress instanceof Inet4Address){localHostAddress = inetAddress.getHostAddress();}}}return localHostAddress;}}

    百度普通IP定位API获取地理位置

    import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.MalfORMedURLException;import java.net.URL;import java.net.URLConnection; import org.JSON.jsONException;import org.json.JSONObject; public class Ip2LocationViaBaidu {public static Object[] getLocation(String ip) throws IOException, JSONException {String lng = null;// 经度String lat = null;// 纬度String province=null;//省String city = null;// 城市名String status = "0";// 成功String ipString = null;String jsonData = ""; // 请求服务器返回的json字符串数据try {ipString = java.net.URLEncoder.encode(ip, "UTF-8");} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}    String key = "*************";// 百度密钥(AK),此处换成自己的AKString url = String.format("https://api.map.baidu.com/location/ip?ak=%s&ip=%s&coor=bd09ll", key, ipString);// 百度普通IP定位APIURL myURL = null;URLConnection httpsConn = null;try {myURL = new URL(url);} catch (MalformedURLException e) {e.printStackTrace();}InputStreamReader insr = null;BufferedReader br = null;try {httpsConn = (URLConnection) myURL.openConnection();// 不使用代理if (httpsConn != null) {insr = new InputStreamReader(httpsConn.getInputStream(), "UTF-8");br = new BufferedReader(insr);String data = null;int count = 1;while ((data = br.readLine()) != null) {jsonData += data;}JSONObject jsonObj = new JSONObject(jsonData);if ("0".equals(jsonObj.getString("status"))) {province = jsonObj.getJSONObject("content").getJSONObject("address_detail").getString("province");city = jsonObj.getJSONObject("content").getJSONObject("address_detail").getString("city"); lng = jsonObj.getJSONObject("content").getJSONObject("point").getString("x");lat = jsonObj.getJSONObject("content").getJSONObject("point").getString("y");if (city.isEmpty() || lng.isEmpty() || lat.isEmpty()) {status = "2";// API返回数据不完整}} else {status = "1";// API查询失败}}} catch (IOException e) {e.printStackTrace();} finally {if (insr != null) {insr.close();}if (br != null) {br.close();}}return new Object[] { status, province, city, lng, lat };}}

    把上边的百度密钥换成你自己的,下边是API返回的json数据格式。

    {      address: "CN|北京|北京|None|CHINANET|1|None",    #地址      content:    #详细内容      {          address: "北京市",    #简要地址          address_detail:    #详细地址信息          {              city: "北京市",    #城市              city_code: 131,    #百度城市代码              district: "",    #区县              province: "北京市",    #省份              street: "",    #街道              street_number: ""    #门址          },          point:    #当前城市中心点          {              x: "116.39564504",              y: "39.92998578"          }      },      status: 0    #返回状态码  }

    java获取IP归属地(省、市)

    添加依赖

    <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.3</version></dependency>

    工具类代码

    package com.shucha.deveiface.biz.test;   import cn.hutool.core.util.StrUtil;import cn.hutool.http.HttpUtil;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.itextpdf.text.log.Logger;import com.itextpdf.text.log.LoggerFactory;import lombok.Data;import org.apache.commons.lang3.StringUtils;import javax.servlet.http.HttpServletRequest;public class iptes {    private static Logger logger = LoggerFactory.getLogger(iptes.class);         public static String getIpAddr(HttpServletRequest request) {        String ip = null;        try {            ip = request.getHeader("x-forwarded-for");            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {                ip = request.getHeader("Proxy-Client-IP");            }            if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {                ip = request.getHeader("WL-Proxy-Client-IP");            }            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {                ip = request.getHeader("HTTP_CLIENT_IP");            }            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {                ip = request.getHeader("HTTP_X_FORWARDED_FOR");            }            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {                ip = request.getRemoteAddr();            }        } catch (Exception e) {            logger.error("IPUtils ERROR ", e);        }         //使用代理,则获取第一个IP地址        if(StringUtils.isEmpty(ip) ) {            if(ip.indexOf(",") > 0) {                ip = ip.substring(0, ip.indexOf(","));            }        }         return ip;    }         public static IpAddress getAddress(String ip) {        String url = "http://ip.ws.126.net/ipquery?ip=" + ip;        String str = HttpUtil.get(url);        if(!StrUtil.hasBlank(str)){            String substring = str.substring(str.indexOf("{"), str.indexOf("}")+1);            JSONObject jsonObject = JSON.parseObject(substring);            String province = jsonObject.getString("province");            String city = jsonObject.getString("city");            IpAddress ipAddress = new IpAddress();            ipAddress.setProvince(province);            ipAddress.setCity(city);            System.out.println("ip:"+ ip + ",省份:" + province + ",城市:" + city);            return ipAddress;        }        return null;    }     @Data    public static class IpAddress{        private String province;        private String city;    }     public static void main(String[] args) {        System.out.println(getAddress("36.25.225.250"));    } }

    测试结果

    测试ip:36.25.225.250

    返回数据:

    ip:36.25.225.250,省份:浙江省,城市:湖州市                  

    iptes.IpAddress(province=浙江省, city=湖州市)

    java怎么通过IP解析地理位置

    感谢各位的阅读,以上就是“java怎么通过IP解析地理位置”的内容了,经过本文的学习后,相信大家对java怎么通过IP解析地理位置这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: java怎么通过IP解析地理位置

    本文链接: https://lsjlt.com/news/349221.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • java怎么通过IP解析地理位置
      这篇文章主要讲解了“java怎么通过IP解析地理位置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java怎么通过IP解析地理位置”吧!java通过IP解析地理位置在项目开发中,需要在登录日...
      99+
      2023-07-05
    • java如何通过IP解析地理位置
      目录java通过IP解析地理位置获取IP地址百度普通IP定位API获取地理位置java获取IP归属地(省、市)总结java通过IP解析地理位置 在项目开发中,需要在登录日志或者操作日...
      99+
      2023-02-13
      java解析IP位置 java地理位置解析 java IP解析位置
    • jQuery如何通过IP地址获得地理位置
      小编给大家分享一下jQuery如何通过IP地址获得地理位置,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!通过IP地址获得地理位置...
      99+
      2024-04-02
    • python分析ip地理位置
      #!/usr/bin/env python #coding=utf8 ################################ # 通过ip138判断ip所在地区 #            ...
      99+
      2023-01-31
      地理位置 python ip
    • java实现通过IP地址获取mac(物理地址)
      java实现通过IP地址获取mac(物理地址),只能获取到局域网的mac地址,具体代码如下: package com.qcmsa.util;import org.apache.commons.log...
      99+
      2023-09-01
      java tcp/ip macos
    • 怎么通过ip地址访问MySql
      怎么通过ip地址访问MySql?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.登录mysql: mysql&nbs...
      99+
      2024-04-02
    • Java输出通过InetAddress获得的IP地址数组详细解析
      使用 InetAddress 获取 IP 地址会得到一个 byte 数组如果你直接输出这个数组,你会发现 IP 地址中的某些位变成了负数比如 61.135.169.105 会输出成 ...
      99+
      2022-11-15
      Java InetAddress
    • Redis高效检索地理位置的原理解析
      Redis GEO 用做存储地理位置信息,并对存储的信息进行操作。通过geo相关的命令,可以很容易在redis中存储和使用经纬度坐标信息。Redis中提供的Geo命令有如下几个: ...
      99+
      2024-04-02
    • 怎么解析IP地址与MAC地址
      怎么解析IP地址与MAC地址,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一:简介在linux系统中,通常使用ifconfig或者ip addr查看服务器的IP...
      99+
      2023-06-03
    • 网通服务器ip地址怎么设置
      我无法直接为您提供网通服务器的IP地址设置方法。但是,一般来说,您需要登录到您的网通服务器管理界面,进入网络设置或IP地址设置页面,...
      99+
      2023-06-08
      网通服务器ip 服务器
    • webpack无法通过IP地址访问localhost怎么办
      这篇文章主要介绍webpack无法通过IP地址访问localhost怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、问题描述:今天用 webpack (v1.14.0)配置本...
      99+
      2024-04-02
    • 怎么在shell中通过正则匹配ip地址
      本篇文章给大家分享的是有关怎么在shell中通过正则匹配ip地址,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。IP分成5大类:A类地址     ⑴...
      99+
      2023-06-09
    • HTML5中Geolocation地理位置定位API怎么用
      这篇文章将为大家详细讲解有关HTML5中Geolocation地理位置定位API怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基本用法 首先,我们可以从浏...
      99+
      2024-04-02
    • js实现PC端根据IP定位当前城市地理位置的示例分析
      这篇文章将为大家详细讲解有关js实现PC端根据IP定位当前城市地理位置的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。<script type=&...
      99+
      2024-04-02
    • 怎么使用Flutter定位包获取地理位置
      本篇内容介绍了“怎么使用Flutter定位包获取地理位置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Flutter 中获取地理位置如今,发...
      99+
      2023-06-21
    • 腾讯云服务器ip怎么看地址的位置
      首先,在手机上打开腾讯云APP,进入腾讯云官网,在页面的左上角可以看到“IP获取”选项。点击进入IP获取页面后,可以在页面上找到腾讯云服务器IP的相关信息,包括服务器IP地址、主机IP地址和端口号等。 如果你想查询更详细的信息,可以通过以...
      99+
      2023-10-27
      腾讯 怎么看 位置
    • HTML5的地理位置功能怎么用
      这篇文章主要讲解了“HTML5的地理位置功能怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML5的地理位置功能怎么用”吧! 这是一个 HTML5...
      99+
      2024-04-02
    • 如何通过php接口和ECharts生成基于地理位置的统计图
      如何通过PHP接口和ECharts生成基于地理位置的统计图在数据可视化领域,ECharts已经成为了一种非常流行的图表库,而PHP作为一种常用的后端开发语言,也经常用于数据处理和接口开发。本文将介绍如何使用PHP接口和ECharts库生成基...
      99+
      2023-12-17
      echarts PHP接口 地理统计图
    • 怎么配置域名解析IP
      配置域名解析IP的方法首先,在浏览器中进入域名代理商网站,并登录到域名管理控制台;登录到域名管理控制台后,在域名列表选择需要解析的域名,并点击域名管理;在域名管理界面中,点击“添加记录”按钮;最后,在弹出的添加记录对话框中,添加一条记录类型...
      99+
      2024-04-02
    • 批处理bat怎么设置固定IP地址和自动IP地址
      本篇内容主要讲解“批处理bat怎么设置固定IP地址和自动IP地址”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“批处理bat怎么设置固定IP地址和自动IP地址”吧!在我个人的使用经验中,我有不同的...
      99+
      2023-06-08
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作