目錄
一、獲取客戶端IP地址
二、獲取IP所在地理位置接口
1、IP域名歸屬地查詢
2、騰訊地圖 - IP定位
3、聚合數據 - IP地址(推薦)
4、高德地圖 - IP定位(推薦)
5、360分享計劃 - IP查詢
6、天聚ip地址查詢?
7、百度IP地址查詢?
?8、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定位-免費API,收集所有免費的API在此申請key,每天可用10000次
?名稱 | 說明 |
---|---|
接口名稱 | 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地址-免費API,收集所有免費的API?在此申請key,每天可用500次,推薦
?名稱 | 說明 |
---|---|
接口名稱 | 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
名稱 | 說明 |
---|---|
接口名稱 | 高德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 | 所在城市矩形區域范圍 | 所在城市范圍的左下右上對標對 |
代碼示例
前端調用寫法
<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>
后端調用寫法
$ip = '223.104.44.14';
$key = 'xxxxxx';
$apiUrl = 'https://restapi.amap.com/v3/ip';
$params = ["key" => $key,"ip" => $ip,
];
$params = http_build_query($params);
$result = $this->returnArray($this->freeApiCurl($apiUrl,$params));
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));
7、百度IP地址查詢?
接口描述:免費
?名稱 | 說明 |
---|---|
接口名稱 | 百度IP地址查詢 |
接口地址 | http://opendata.baidu.com/api.php |
請求方式 | GET |
來源 | 百度開放中心 |
?請求參數說明
參數 | 必填 | 含義 | 說明 |
---|---|---|---|
query | 是 | IP地址 | 需要查詢的IP地址 |
resource_id | 是 | 資源id | 填寫6006即可 |
oe | 是 | 數據編碼 | utf8 |
format | 否 | 返回數據格式 | json |
返回參數說明(下面只列出主要參數,詳細返回參數可查看下面截圖)
名稱 | 含義 | 說明 |
---|---|---|
status | 狀態碼 | 0表示成功 |
data | 返回數據集 | |
OriginQuery | 請求的ip地址 | |
location | 地理位置和運營商 | 如:河南省鄭州市? ?移動 |
resource_id | 資源id |
代碼示例
$ip = '111.7.100.23';
$apiUrl = 'http://opendata.baidu.com/api.php?query='.$ip.'&resource_id=6006&oe=utf8&format=json';
$result = $this->returnArray($this->freeApiCurl($apiUrl));
?8、IP歸屬地查詢
接口描述:免費,穩定性較差,自動區分IPv4/IPv6
?名稱 | 說明 |
---|---|
接口名稱 | IP歸屬地查詢 |
接口地址 | https://api.vore.top/api/IPdata |
請求方式 | GET |
來源 | vore-api,由個人搭建 |
?請求參數說明
參數 | 必填 | 含義 | 說明 |
---|---|---|---|
ip | 是 | IP地址 | 需要查詢的IP地址 |
返回參數說明(下面只列出主要參數,詳細返回參數可查看下面截圖)
名稱 | 類型 | 含義 | 說明 |
---|---|---|---|
code | string | 狀態碼 | 200表示成功 |
msg | string | 錯誤信息 | 成功時顯示SUCCESS,錯誤時顯示錯誤信息 |
ipinfo | object | ip信息 | 包括ip的類型,請求的ip地址 |
ipdata | object | ip數據 | |
info1 | string | 省份 | |
info2 | string | 城市 | |
info3 | string | ||
isp | string | 運營商 | |
adcode | object | 行政區劃信息集 | |
o | string | 定位信息及運營商 | 河南省鄭州市 - 移動 |
p | string | 省份 | |
c | string | 城市 | |
...... | ...... | ...... | |
time | 當前時間戳 |
代碼示例
$ip = '111.7.100.23';
$apiUrl = 'https://api.vore.top/api/IPdata?ip='.$ip;
$result = $this->returnArray($this->freeApiCurl($apiUrl));