最近一段时间,楼主接到了一个比较简单的小需求。要根据提供的ip地址(ipv4,ipv6)定位到该ip所在的城市。包括国外。
在查找了一系列方法中, 汇总一下楼主知道的一些解决方案。
方案一:com.jthinking.common ipinfo
git地址:ip-info: IP地址库Java版本。IP地理位置获取,支持获取IPv4、IPv6地址信息。包括:国家中文名称、中国省份中文名称、详细地址、互联网服务提供商、是否是国外、纬度、经度。
使用方法在git里写的都比较清楚,楼主就不一一介绍了
优点:国内ip都比较准确,支持ipv4,ipv6。可以获取经纬度。返回结果比较规范
缺点:不支持国外地址。国外只能识别到国家。
方案二:ip2region
这个是搜索最多的结果,据说准确率高达99%。原理也是解析本地文件。需要把.xdb文件下载到本地,然后读取该文件解析
使用方法在git里写的都比较清楚,楼主就不一一介绍了
优点:国内ip都比较准确,支持ipv4。返回结果相对规范。
缺点:不支持ipv6.国外某些地址会定位失败。获取经纬度的方法楼主没发现。
方案三:ip-api.com
这个是一个国外的ip定位网站,实际使用下来感觉:能用,但不可靠
官网:IP-API.com - Geolocation API
有根据json传参直接获取结果的api。
优点:操作简单,请求即可。支持ipv4,ipv6。支持国内外ip定位。支持中英文。支持批量获取。
缺点:定位不准,经常不准。国内很多ip定位可能会差的很多。返回结果不一定规范。生产环境可能会出现请求慢的情况。
官网实例:
批量+中文请求示例:
方案四:一些其他官方api获取方法
比如:高德定位,腾讯定位,百度定位。这些都可以通过官网地址进入。关键字就搜这几个。
楼主这里仅展示腾讯定位的使用方法:具体操作可以查看官方文档。应该是免费的。
优缺点:大厂肯定很权威啦。个人觉得可以无脑支持。这里楼主没使用。应该是不支持国外地址
postman请求:
最后的总结:感觉定位的准准确确有些困难,尤其是国外地址。楼主没找到完美的解决方案,最好根据业务选择方案,或者多者结合。可能实现的结果有限,有些事后不如试着让业务妥协一下。
目录
方案一:com.jthinking.common ipinfo