【PHP】通过IP获取IP所在地理位置(免费API接口)
目录
一、获取客户端IP地址
二、获取IP所在地理位置接口
1、IP域名归属地查询
2、IP定位
3、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域名归属地查询
接口描述:(无限制)
接口地址:https://api.asilu.com/ip/
请求方式:get或post
请求示例:https://api.asilu.com/ip/?ip=61.135.17.68
请求参数
ip:ip地址或域名,缺省时会使用当前请求端的Ip
代码示例
$ip = get_ip();
$apiUrl = 'https://api.asilu.com/ip/?ip='.$ip;
$result = $this->returnArray($this->freeApiCurl($apiUrl));
返回值:返回数组格式
ip:ip地址或域名
dz:地理位置
wl:运营商
2、IP定位
接口描述(有限制) - 腾讯地图,官方文档:WebService API | 腾讯位置服务
接口地址:https://apis.map.qq.com/ws/location/v1/ip
请求方式:get
请求示例:https://apis.map.qq.com/ws/location/v1/ip?ip=61.135.17.68&key=yourkey
请求参数
key:开发密钥,参看“IP定位-免费API,收集所有免费的API”
ip:ip地址,缺省时会使用当前请求端的Ip
代码示例
$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));
返回值
status:状态值,0 表示结果正常
result:返回结果集,(经纬度、行政区划信息)
3、IP地址
接口描述(有限制,50次/天) - 聚合数据
接口地址:http://apis.juhe.cn/ip/ipNew
请求地址:get/post
请求示例:http://apis.juhe.cn/ip/ipNew?ip=112.112.11.11&key=youkey
请求参数
key:开发密钥,参看“IP地址查询接口_IP归属地查询接口_免费API数据接口_聚合数据 - 天聚地合”
ip:ip地址,缺省时会使用当前请求端的IP
代码示例
$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));
返回值
error_code:返回码,为0时请求正常
result:返回结果集