前言
最近想在自己的博客网站上记录访问者的ip地址和城市等信息。在网上尝试了几种办法都有瑕疵,后来通过腾讯位置服务提供的接口调用成功实现。

实现步骤:
1、去腾讯位置服务网站进行开发者注册
2、通过访问控制台中key管理,申请key
3、在key设置里设置白名单,否则有key也不能成功调用接口。
包括域名白名单和授权ip,一般是自己本机和服务器的ip

4、程序代码

package com.lingfen.website.blog.utils;import com.alibaba.fastjson.JSONObject;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;public class IpToAddressUtil {//使用腾讯的接口通过ip拿到城市信息private static final String KEY = "自己的key";public static String getCityInfo(String ip)  {String s = sendGet(ip, KEY);Map map = JSONObject.parseObject(s, Map.class);String message = (String) map.get("message");if("query ok".equals(message)){Map result = (Map) map.get("result");Map addressInfo = (Map) result.get("ad_info");String nation = (String) addressInfo.get("nation");String province = (String) addressInfo.get("province");//  String district = (String) addressInfo.get("district");String city = (String) addressInfo.get("city");String address = nation + "-" + province + "-" + city;return address;}else{System.out.println(message);return null;}}//根据在腾讯位置服务上申请的key进行请求操作public static String sendGet(String ip, String key) {String result = "";BufferedReader in = null;try {String urlNameString = "https://apis.map.qq.com/ws/location/v1/ip?ip="+ip+"&key="+key;URL realUrl = new URL(urlNameString);// 打开和URL之间的连接URLConnection connection = realUrl.openConnection();// 设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 建立实际的连接connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段
//            for (Map.Entry entry : map.entrySet()) {//                System.out.println(key + "--->" + entry);
//            }// 定义 BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送GET请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}} catch (Exception e2) {e2.printStackTrace();}}return result;}}

具体怎么获取ip的方法就不介绍了,网站很多,这里主要是用ip来获取位置信息。

最终后台数据库记录:

另外踩的坑有如下:
1、通过github开源项目ip2region,拿到ip的位置信息。该做法是通过一个db文件,通过算法去根据ip查找db文件得到位置信息,但是存在以下缺陷:
1)并发问题,由于每次是通过磁盘读取文件,在高并发时会造成io连接过多,资源紧张。
ps:它也提供了通过将db文件加载到内存中的方法,来解决这个问题,但是也会造成内存的空间使用。
2)jar文件打包后问题:在本地ide可以通过getResource获得db文件路径,但是在服务器jar包里,路径是不对的。

2、通过淘宝ip库,新浪ip库等
但是获取的接口都已经失效了

Java-根据IP获取对应位置信息相关推荐

  1. Java 通过 ip 获取所属城市信息

    文章目录 1 摘要 2 核心 Maven 依赖 3 离线数据 db 保存 4 核心代码 5 测试 6 推荐参考资料 1 摘要 在实际项目中可能会用到统计用户地理位置的需求,这时可以通过客户端的 ip ...

  2. Python/PHP:免费IP归属地查询接口和通过ip获取大致位置信息

    1.淘宝API接口: 文档:http://ip.taobao.com/instructions 示例: GET http://ip.taobao.com/outGetIpInfo?ip=221.218 ...

  3. java根据IP获取当前区域天气信息

    java根据IP获取当前区域天气信息 大致思路是客户端发起请求,我们首先根据请求获取到外网IP,然后再根据外网IP获取到用户所在城市,最后根据城市获取到天气信息 获取外网IP 万网获取外网IP地址: ...

  4. 百度地图利用位置提供服务器,利用百度地图API获取当前位置信息的实例

    利用百度地图API可以做很多事情,个人感觉最核心也是最基础的就是定位功能了.这里分享一个制作的JS可以实现登录网页后定位: var map; var gpsPoint; var baiduPoint; ...

  5. 微信小程序获取用户位置信息并显示到地图上

    1.配置地理位置用途说明 在app.json中的大括号内输入 "permission": {"scope.userLocation": {"desc& ...

  6. 通过高德地图API实现浏览器定位[以及提高定位精度、获取详细位置信息]

    目录 一.前言: 二.正文: 1.注册高德地图开发者.创建应用 2.借助官方的示例开发 3.对官方的开发示例进行修改 4.获取详细位置信息 5.详细代码 三.结尾:小周接触编程时间不长,刚起步,有更好 ...

  7. Android 获取照片位置信息

    首先,需要读取手机本地的照片信息,可以借助ContentProvider读取本地媒体数据库来获得. 打开DDMS,在data/data/com.android.prividers.media/data ...

  8. 微信服务号开发-获取用户位置信息

    微信服务号开发-获取用户位置信息 在微信公众号开发的中,获取用户位置信息是非常常见的功能需求,通过用户的位置信息,可以做一些地图导航,以及基于LBS的营销活动. 下面将介绍微信服务号获取用户位置信息的 ...

  9. UNIAPP中腾讯地图选点组件和wx.getLocation配合使用,实现定位当前位置,并获取当前位置信息。

    我是用地图选点组件和wx.getLocation()接口组合起来实现定位当前位置并获取当前位置信息进行使用,大致说一下自己的实现步骤. 写的虽然粗糙,但是纯纯干货啊兄弟!!! 腾讯位置服务申请key ...

最新文章

  1. 在别的电脑上运行cg程序出现错误的解决办法
  2. 他是第一批推动比特币普及的人 如今早已放弃了信仰
  3. 肾炎治疗有效方(湿热壅滞三焦,气机不利)
  4. CRMEB开发文档及目录结构
  5. PHP中的SESSION机制应用
  6. 加载(WebView)页面,调JS刷新数据
  7. VHDL程序基本构建
  8. 使用Java将HTML转成Word格式文件
  9. visual studio code更新
  10. 央视被黑内幕,居然存在暴库及上传漏洞
  11. linux然后防止ip欺骗,linux – 如何在iptables中防止ip欺骗?
  12. WPF-使用代码创建Grid行与列,并将控件添加到Grid中的指定行指定列
  13. [深大深鸿会]利用DevEco Studio从零开发OpenHarmony小游戏——2048(上)
  14. linux 时间戳是什么数据类型,Linux时间戳、时间类型转换
  15. PTA Left-pad Java
  16. thinkphp 下实现繁简体汉字转换
  17. 证件照的背景颜色转换
  18. JAVA、android常用时间处理方法及类似微信微博发表时间显示
  19. html dom onblur,html DOM Event对象onblur事件
  20. Redhat相关快捷键

热门文章

  1. 基于NT98530的多目VR摄像机方案,多sensor同步,多sensor防抖,PTP校时,实景SLAM数字孪生的最佳搭档。
  2. 云服务器微信faq,微信公众平台常见问题FAQ
  3. php菱形循环代码,PHP练习–用for循环打印空心菱形,for菱形_PHP教程
  4. matlab取中间的几位数,Excel中取前几位数、中间几位数、后几位数的方法
  5. lol服务器维护8月7,LOL8月7日更新维护到几点 英雄联盟8.7更新了哪些内容
  6. 浏览器百家争鸣,国产能打的浏览器来了!
  7. 软件配置 | win / mac M1 imagemagick 的安装
  8. 发送报警信息到微信公众号
  9. 四维空间的二维线框投影可视化(附matlab代码)
  10. 最新流行的网页网络游戏(九龙朝、傲剑、战千雄、诛神、传承)