> 技术文档 > 【PHP】几种免费的通过IP获取IP所在地理位置的接口(部分免费部分收费)

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

目录

一、获取客户端IP地址

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

1、IP域名归属地查询

2、腾讯地图 - IP定位

3、聚合数据 - IP地址

4、高德地图 - IP定位

5、360分享计划 - IP查询

6、天聚ip地址查询 


整理收集了几种通过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 接口

 请求参数说明

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

返回参数说明

名称 含义 说明 ip ip地址 当前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 是 开发密钥 ip 否 IP地址 ip地址或域名,缺省时会使用当前请求端的Ip  output 否 返回格式 支持JSON/JSONP,默认JSON callback 否 JSONP方式回调函数

返回参数说明

名称 类型 说明 status number 状态码,0为正常,其它为异常,详细请参阅状态码说明 message string 对status的描述 result object IP定位结果 ip string 用于定位的IP地址 location object 定位坐标。注:IP定位服务精确到市级,该位置为IP地址所属的行政区划政府坐标。 lat number 纬度 lng number 经度 ad_info object 定位行政区划信息 nation string 国家 nation_code number 国家代码(ISO3166标准3位数字码) province string city string district string adcode number 行政区代码

代码示例 

$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 是 开发密钥 在个人中心->我的数据,接口名称上方查看 ip 是 IP地址 需要查询的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定位

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

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

 请求参数说明

参数 必填 含义 说明 key 是 请求服务权限标识 用户在高德地图官网 申请 Web 服务 API 类型 KEY ip 否 IP地址 需要搜索的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 所在城市矩形区域范围 所在城市范围的左下右上对标对

代码示例

 $.ajax({ url:\'https://restapi.amap.com/v3/ip?key=xxxxxx\', data:{ip:\'223.104.3.43\'}, //不填查询当前IP success:function (data) { //市,如郑州市 var city = data.city; //邮编:410100 var cityCode = data.adcode; //省份:河南省 var province = data.province; //省邮编:410000 var provinceCode = data.provinceCode; //经度 & 维度,以;间隔 var rectangle = data.rectangle; console.log(data) }});

5、360分享计划 - IP查询

接口描述:免费,不稳定,有时候有数据有时候无数据

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

 请求参数说明

参数 必填 含义 说明 ip 是 IP地址 需要查询的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是河南郑州的,结果返回河南驻马店,请酌情使用 

6、天聚ip地址查询 

接口描述:收费,每天有100次的免费额度

 名称 说明 接口名称 IP地址查询 接口地址 https://apis.tianapi.com/ipquery/index 请求方式 GET/POST 来源 天聚数行 官方文档 ip地址查询API接口 - 天聚数行TianAPI

 请求参数说明

参数 必填 含义 说明 key 是 API密钥 官网注册申请 ip 是 IP地址 需要查询的IP地址 full 是 是否需要省市全称 1表示需要

返回参数说明

名称 含义 说明 code 状态码 200表示成功 msg 错误信息 成功时显示success,错误时显示错误信息 result 返回结果集 ip ip地址 continent 大陆州 country 国家 province 省级行政区 city 城市 district 地区 isp 网络运营商 areacode 地区编码 countrycode 国家代码 countryenglish 国家英文名称 timezone 国际时区 longitude 经度 latitude 纬度

代码示例

$ip = \'223.104.44.14\';$apiUrl = \'https://apis.tianapi.com/ipquery/index\';$params = [ \"key\" => \"xxxxxx\", \"ip\" => $ip, \"full\" => \"1\" ];$params = http_build_query($params);$result = $this->returnArray($this->freeApiCurl($apiUrl,$params,1));