当前位置: 首页 > ai >正文

【PHP】几种免费的通过IP获取IP所在地理位置的接口(免费API接口)

目录

一、获取客户端IP地址

二、获取IP所在地理位置接口

1、IP域名归属地查询

2、腾讯地图 - IP定位

3、聚合数据 - IP地址

4、高德地图 - IP定位

5、360分享计划 - IP查询


一、获取客户端IP地址

//获取ip地址
function get_ip(){if (isset($_SERVER)) {if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {$realip = $_SERVER['HTTP_CLIENT_IP'];} else {$realip = $_SERVER['REMOTE_ADDR'];}} else {if (getenv("HTTP_X_FORWARDED_FOR")) {$realip = getenv( "HTTP_X_FORWARDED_FOR");} elseif (getenv("HTTP_CLIENT_IP")) {$realip = getenv("HTTP_CLIENT_IP");} else {$realip = getenv("REMOTE_ADDR");}}return $realip;
}

二、获取IP所在地理位置接口

一些通用的方法,用于处理接口:CURL请求,将JSON转为数组

// CURL请求
public function freeApiCurl($url,$params=false,$ispost=0){$ch = curl_init();curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );curl_setopt( $ch, CURLOPT_USERAGENT , 'free-api' );curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );curl_setopt( $ch, CURLOPT_TIMEOUT , 60);curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );if( $ispost ){curl_setopt( $ch , CURLOPT_POST , true );curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );curl_setopt( $ch , CURLOPT_URL , $url );}else{if($params){curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );}else{curl_setopt( $ch , CURLOPT_URL , $url);}}$response = curl_exec( $ch );if ($response === FALSE) {return false;}curl_close( $ch );return $response;
}/*** 将JSON内容转为数据,并返回*/
public function returnArray($content){return json_decode($content,true);
}

1、IP域名归属地查询

接口描述:(无限制)

 名称说明
接口名称IP/域名归属地查询
接口地址https://api.asilu.com/ip/
请求方式GET/POST
官方文档API 接口

 请求参数说明

参数必填含义说明
ipIP地址ip地址或域名,缺省时会使用当前请求端的Ip 

返回参数说明

名称含义说明
ipip地址当前ip地址或域名
dz地理位置请求IP的地理位置
wl运营商

 代码示例

$ip = get_ip();
$apiUrl = 'https://api.asilu.com/ip/?ip='.$ip;
$result = $this->returnArray($this->freeApiCurl($apiUrl));

2、腾讯地图 - IP定位

接口描述:有限制

 名称说明
接口名称IP定位
接口地址https://apis.map.qq.com/ws/location/v1/ip
请求方式GET
来源腾讯地图
官方文档

WebService API | 腾讯位置服务

 请求参数说明

参数必填含义说明
key开发密钥
ipIP地址ip地址或域名,缺省时会使用当前请求端的Ip 
output返回格式支持JSON/JSONP,默认JSON
callbackJSONP方式回调函数

返回参数说明

名称类型说明
statusnumber状态码,0为正常,其它为异常,详细请参阅状态码说明
messagestring对status的描述
resultobjectIP定位结果
ipstring用于定位的IP地址
locationobject定位坐标。注:IP定位服务精确到市级,该位置为IP地址所属的行政区划政府坐标。
latnumber纬度
lngnumber经度
ad_infoobject定位行政区划信息
nationstring国家
nation_codenumber国家代码(ISO3166标准3位数字码)
provincestring
citystring
districtstring
adcodenumber行政区代码

代码示例 

$ip = get_ip();
$apiUrl = 'https://apis.map.qq.com/ws/location/v1/ip';
$params = ["key" => "xxxxxx","ip" => $ip];
$params = http_build_query($params);
$result = $this->returnArray($this->freeApiCurl($apiUrl,$params,1));

3、聚合数据 - IP地址

接口描述:有限制,50次/天 - 聚合数据

 名称说明
接口名称IP地址查询
接口地址http://apis.juhe.cn/ip/ipNewV3
请求方式GET/POST
来源聚合数据
官方文档IP地址查询接口_IP归属地查询接口_免费API数据接口_聚合数据 - 天聚地合

 请求参数说明

参数必填含义说明
key开发密钥在个人中心->我的数据,接口名称上方查看
ipIP地址需要查询的IPv4地址。暂不支持IPv6地址

返回参数说明

名称含义说明
error_code返回码0表示成功
resultcode状态码200表示成功
reason返回说明
result返回结果集
Country国家/地区
Province省份区域,部分可能为空
City城市,部分可能为空
Isp运营商,部分可能为空

代码示例

$ip = get_ip();
$apiUrl = 'http://apis.juhe.cn/ip/ipNew';
$params = ["key" => "xxxxxxx","ip" => $ip];$params = http_build_query($params);
$rs = $this->returnArray($this->freeApiCurl($apiUrl,$params,1));

4、高德地图 - IP定位

接口描述:高德地图IP定位接口支持HTTP/HTTPS,采用前端javascript的方式调用,比较简单,每月免费150000次

名称说明
接口名称高德IP定位
接口地址https://restapi.amap.com/v3/ip?parameters
请求方式GET
来源高德地图
官方文档IP定位-基础 API 文档-开发指南-Web服务 API | 高德地图API

 请求参数说明

参数必填含义说明
key请求服务权限标识用户在高德地图官网 申请 Web 服务 API 类型 KEY
ipIP地址需要搜索的IP地址,若不填写IP,则使用当前IP
sig签名选择数字签名认证的付费用户必填

返回参数说明

名称含义说明
status结果状态值0表示失败,1表示成功
info状态说明当status为0时,info返回错误原因,否则返回OK
infocode状态码10000代表正确
province省份

如果在局域网 IP 网段内,则返回“局域网”;

非法 IP 以及国外 IP 则返回空

city城市如果为局域网网段内 IP 或者非法 IP 或国外 IP,则返回空
adcode城市的 adcode 编码adcode 信息可参考 城市编码表 获取
rectangle所在城市矩形区域范围所在城市范围的左下右上对标对

代码示例

<script src="/newadmin/js/jquery-1.12.3.min.js" charset="utf-8"></script> 
<script>
$.ajax({url:'https://restapi.amap.com/v3/ip?key=xxxxxx',data:{ip:'223.104.3.43'},    //不填查询当前IPsuccess:function (data) {//市,如郑州市var city = data.city;//邮编:410100var cityCode = data.adcode;//省份:河南省var province = data.province;//省邮编:410000var provinceCode = data.provinceCode;//经度 & 维度,以;间隔var rectangle = data.rectangle;console.log(data)}
});
</script>

5、360分享计划 - IP查询

接口描述:无限制,不稳定,有时候有数据有时候无数据

 名称说明
接口名称IP地址查询
接口地址http://ip.360.cn/IPQuery/ipquery
请求方式GET/POST
来源360分享计划

 请求参数说明

参数必填含义说明
ipIP地址需要查询的IP地址

返回参数说明

名称含义说明
errno返回码0表示成功
code返回码当code=null时,请求失败
errmsg错误信息errno为0时,错误信息为空
data返回地理位置及运营商如:北京市   移动

代码示例

public function index(){$ip = get_ip();$apiUrl = 'http://ip.360.cn/IPQuery/ipquery';$params = ["ip" => $ip];$params = http_build_query($params);$result = $this->returnArray($this->freeApiCurl($apiUrl,$params,1));}

这个接口好像对市级不太精准,这个Ip是河南郑州的,结果返回河南驻马店,请酌情使用 

http://www.xdnf.cn/news/16485.html

相关文章:

  • 硬件学习笔记--73 电能表新旧精度等级对应关系
  • Android 解决键盘遮挡输入框
  • Javaweb————HTTP请求头属性讲解
  • 前端css 的固定布局,流式布局,弹性布局,自适应布局,响应式布局
  • VNC和RPC加固措施
  • win10 环境删除文件提示文件被使用无法删除怎么办?
  • 海外短剧系统架构设计:从0到1搭建高并发微服务平台
  • 白玩 一 记录retrofit+okhttp+flow 及 kts的全局配置
  • 墨者:SQL过滤字符后手工注入漏洞测试(第3题)
  • npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
  • 什么是ios企业签名?
  • VTK开发笔记(一):VTK介绍,Qt5.9.3+VS2017x64+VTK8.2编译
  • 使用 Django REST Framework 构建强大的 API
  • vue请求golang后端CORS跨域问题深度踩坑
  • 分布式链路追踪详解
  • 图论:Bellman_ford算法
  • 预过滤环境光贴图制作教程:第三阶段 - GGX 分布预过滤
  • Unity 编辑器开发 之 Excel导表工具
  • git使用lfs解决大文件上传限制
  • 监控场景视频质量异常修复:陌讯动态增强算法实战解析
  • 使用JavaScript实现轮播图的自动切换和左右箭头切换效果
  • BERT 的 NSP慢慢转换为SOP
  • Linux -- 文件【中】
  • 工具链攻击利用漏洞链入侵SharePoint服务器获取完全控制权
  • 图片查重从设计到实现(7) :使用 Milvus 实现高效图片查重功能
  • python基础:request请求Cookie保持登录状态、重定向与历史请求、SSL证书校验、超时和重试失败、自动生成request请求代码和案例实践
  • GCC、glibc、GNU C(gnuc)的关系
  • 准大一GIS专业新生,如何挑选电脑?
  • redhat7.9更换源为centos7(阿里云源-目前centos7可用的源)
  • 基于KMeans、AgglomerativeClustering、DBSCAN、PCA的聚类分析的区域经济差异研究