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

【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:返回结果集

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

相关文章:

  • 数据结构(5)单链表算法题(中)
  • 【LLM】——qwen2.5 VL模型导出到onnx
  • uni-app x开发避坑指南:拯救被卡顿的UI线程!
  • 7月29日星期二今日早报简报微语报早读
  • 前端手写贴
  • PyTorch 数据类型和使用
  • Arduino与STM32:初学者该如何选择?
  • 【LeetCode 热题 100】(二)双指针
  • Mac安装Navicat步骤Navicat Premium for Mac v17.1.9【亲测】
  • 《React与Vue构建TODO应用的深层逻辑》
  • 【目标检测】小样本度量学习
  • 知不足而奋进,望远山而前行。
  • 接口自动化测试pytest框架
  • 从0到1理解大语言模型:读《大语言模型:从理论到实践(第2版)》笔记
  • 百元级工业级核心板:明远智睿×瑞萨V2H,开启AIoT开发新纪元
  • 如何查询并访问路由器的默认网关(IP地址)?
  • 如何在 Ubuntu 24.04 或 22.04 Linux 上安装和运行 Redis 服务器
  • 场景解决-列表项切换时同步到可视区域
  • jvm冷门知识十讲
  • 【lucene】currentFrame与staticFrame
  • 落霞归雁思维框架应用(十) ——在职考研 199 管综 + 英语二 30 周「顺水行舟」上岸指南
  • 26考研11408数据结构
  • 电脑没有声音了怎么恢复 快速解决音频故障
  • 艾利特机器人:光伏机器人如何重塑清洁能源制造新格局
  • HarmonyOS-ArkUI Web控件基础铺垫6--TCP协议- 流量控制算法与拥塞控制算法
  • 道路坑洞检测数据集介绍8300张图片-智能道路巡检系统 车载安全监测设备 城市基础设施管理
  • QFutureWatcher 收不到 finished 信号-QFutureWatcher 与对象生命周期
  • Mac m系列芯片安装node14版本使用nvm + Rosetta 2
  • 【Rust并发集合】如何在多线程中并发安全地使用集合
  • vue3插槽详解