文章 网站源码

PHP后端第三方查询IP接口源代码

首页 > 网站源码 > 正文

原理说明

先通过获取请求的客户端ip地址或请求参数中的ip地址,然后再通过远程第三方api接口来查询ip的详细信息。再把查询到的ip信息保存到本地json文件用于同一个ip第二是查询时直接返回保存到本地的响应信息,这样可以减少请求第三方api接口的频率避免被拉黑

PHP代码都加了注释,方便小白修改或参考学习

<?php//作者:看戏仔//请求:支持GET/POST两种请求方式//参数://ip 填写Ip地址则查询填写的ip地址//如果不填写任何参数则获取请求的客户端ip地址// 设置 CORS headersheader("Access-Control-Allow-Origin: *"); // 这里使用 * 允许所有源,但出于安全考虑,应该指定具体源header("Access-Control-Allow-Credentials: true"); // 允许请求携带凭据// 设置缓存文件路径define('CACHE_FILE', 'ip_cache.json');// 获取客户端IP地址,或者从请求参数中获取$requestedIP = isset($_GET['ip']) ? $_GET['ip'] : $_SERVER['REMOTE_ADDR'];// 检查缓存并获取IP信息$cacheData = @file_get_contents(CACHE_FILE);$cacheArray = $cacheData !== false ? json_decode($cacheData, true) : [];// 如果缓存中存在请求的IP地址,则直接返回缓存的信息if (isset($cacheArray[$requestedIP])) { $ipInfo = $cacheArray[$requestedIP]; $fromCache = true;} else { // 如果缓存中不存在,查询外部API获取IP信息 $ipInfo = getIPInfoFromAPI($requestedIP); if (!empty($ipInfo)) { // 将获取到的信息保存到缓存中 $cacheArray[$requestedIP] = $ipInfo; file_put_contents(CACHE_FILE, json_encode($cacheArray, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); $fromCache = false; }}// 构建JSON响应$response = [ "code" => 200, "success" => true, "msg" => "获取成功!", "ip" => $requestedIP, "data" => [ "country" => $ipInfo['nation'], "province" => $ipInfo['province'], "city" => $ipInfo['subdivision_2_name'], "isp" => $ipInfo['isp'] ], "tips" => "接口由看戏仔-API(http://api.kxzjoker.cn/)免费提供", "fromCache" => $fromCache // 添加标签以表明是否使用了本地缓存的信息];// 输出JSON响应header('Content-Type: application/json');echo json_encode($response, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);// 发送HTTP请求获取IP信息的函数function getIPInfoFromAPI($ip) { $url = "https://webapi-pc.meitu.com/common/ip_location?ip=" . urlencode($ip); $userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, $userAgent); $response = curl_exec($ch); curl_close($ch); $apiResponse = json_decode($response, true); return $apiResponse['data'][$ip] ?? null;}?>

请求说明

请求参数

ip=需要查询的IP地址

返回示例

{"code": 200,"success": true,"msg": "获取成功!","ip": "123.121.179.195","data": {"country": "中国","province": "北京","city": "北京","isp": "联通"},"fromCache": false}

返回参数

  1. ip→IP地址
  2. country→国家
  3. province→省份
  4. city→城市
  5. isp→运营商
  6. fromCache→是否是本地缓存信息
免责声明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
StarMQPay支付页面跳转其他网站原因_解决方法
« 上一篇 06月26日
To QQMusic - 将歌单转换到 QQ 音乐
下一篇 » 06月26日

还没有评论,快来抢沙发吧!