【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 = get_ip();$apiUrl = \'https://api.asilu.com/ip/?ip=\'.$ip;$result = $this->returnArray($this->freeApiCurl($apiUrl));
2、腾讯地图 - IP定位
接口描述:收费
WebService API | 腾讯位置服务
请求参数说明
返回参数说明
代码示例
$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 = 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 网段内,则返回“局域网”;
非法 IP 以及国外 IP 则返回空
代码示例
$.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查询
接口描述:免费,不稳定,有时候有数据有时候无数据
请求参数说明
返回参数说明
代码示例
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 = \'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));