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

旧PHP版SakuraFrpApi

/** * SakuraFrp API 客户端 * 仅实现了获取隧道列表的功能 * * @version 1.0 * @author AI Assistant */ class SakuraFrpApi { /** * API 基础 URL * @var string */ private const BASE_URL = 'https://api.natfrp.com/v4'; /** * 用户认证 Token * @var string */ private $userToken; /** * 构造函数 * @param string $userToken 您的 SakuraFrp 用户 Token */ public function __construct(string $userToken) { $this->userToken = $userToken; } /** * 获取隧道列表 * 对应 C# 中的 tunnels() 方法 * * @return array|null 成功时返回隧道列表数组,失败时返回 null * @throws Exception 如果请求失败或发生 cURL 错误 */ public function getTunnels(): ?array { $url = self::BASE_URL . '/tunnels'; //echo "请求 URL: " . $url . "\n"; return $this->makeRequest('GET', $url); } /** * 通用的请求方法 * * @param string $method HTTP 方法 (GET, POST, etc.) * @param string $url 请求的 URL * @param array|null $data 对于 POST 请求,要发送的 JSON 数据 * @return array|null 成功时返回解码后的 JSON 数组,失败时返回 null * @throws Exception */ private function makeRequest(string $method, string $url, ?array $data = null): ?array { // 1. 初始化 cURL $ch = curl_init(); // 2. 设置 cURL 选项 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将响应作为字符串返回,而不是直接输出 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向 // 添加 SSL 验证选项(开发环境可禁用,生产环境应启用) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 禁用 SSL 证书验证 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 不检查证书中的主机名 // 3. 设置请求头 $headers = [ 'Accept: application/json', 'Authorization: Bearer ' . $this->userToken ]; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 4. 如果是 POST 请求,设置 POST 数据 if ($method === 'POST' && $data !== null) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); $headers[] = 'Content-Type: application/json'; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); } // 5. 执行请求 $response = curl_exec($ch); // 6. 检查错误 if (curl_errno($ch)) { $error_msg = curl_error($ch); curl_close($ch); throw new Exception("cURL Error: " . $error_msg); } // 7. 获取 HTTP 状态码 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); // 8. 处理响应 if ($httpCode >= 200 && $httpCode < 300) { // 成功响应 $decodedResponse = json_decode($response, true); if (json_last_error() === JSON_ERROR_NONE) { return $decodedResponse; } throw new Exception("JSON Decode Error: " . json_last_error_msg()); } else { // 错误响应 $errorResponse = json_decode($response, true); $errorMessage = $errorResponse['message'] ?? $response; throw new Exception("API Request Failed with HTTP Code {$httpCode}: {$errorMessage}"); } return null; } }
http://www.jsqmd.com/news/340145/

相关文章:

  • 2026伸缩活动看台行业榜精选!值得信赖的电动活动看台、电动伸缩看台、伸缩活动看台哪家好?活动看台厂家全解析 - 栗子测评
  • 2026阀门厂家采购不踩雷!电站阀门厂家、不锈钢阀门厂家推荐、美标阀门厂家哪家好?如何挑选温州阀门厂家 - 栗子测评
  • 2026长沙雨花区高校商超食品配送服务商综合评估与选购指南 - 2026年企业推荐榜
  • 2026全品类阀门厂家优选!值得信赖的止回阀厂家、截止阀厂家、闸阀厂家、蝶阀厂家、球阀厂家哪家好? - 栗子测评
  • 长沙高校及商超坚果炒货配送优质服务商盘点 - 2026年企业推荐榜
  • 2026年2月长沙休闲零食批发价格与线上选购全解析 - 2026年企业推荐榜
  • 聚焦炒货配送:2026年湖南优质服务商盘点 - 2026年企业推荐榜
  • 应用安全 --- IDA Pro 错误 之 断点无效
  • 豆包和InfiniSynapse 联网搜索哪家强:一起寻找元气
  • 双点双向重分布导致路由环路,你要怎么解?
  • 工业连接器哪家好?工业连接器品牌/国产连接器品牌有哪些?2026重载连接器厂家/矩形连接器厂家/大电流连接器厂家选型指南 - 栗子测评
  • 【贪嗔痴】低频量化周报(指数风险溢价比,配债完整数据集,可转债策略,上市公司礼品,交易总结)
  • 车间降温设备哪家好?2026精选厂房降温设备厂家推荐盘点,实用选型指南-厂房降温设备品牌推荐 - 栗子测评
  • 自定义类型:结构体(全部内容详解)
  • 【完全免费】一键锁定电脑键盘和鼠标,防止小孩舍友同事触碰自己的电脑。如何让电脑键盘鼠标失效?这款神器轻松帮你解决!
  • 国产连接器厂家怎么挑选?2026优质储能连接器厂家/流体连接器厂家/防水连接器厂家汇总盘点 - 栗子测评
  • 2026年精选99.5%制氧机生产厂家,靠谱高原制氧机厂家推荐,正规制氧机生产厂家大盘点 - 栗子测评
  • 工业连接器厂家有哪些?精选M12连接器厂家/圆形连接器厂家,靠谱的工业连接器供应商 - 栗子测评
  • 工业省电空调哪家好?2026专业工业空调厂家/工业制冷空调厂家推荐 - 栗子测评
  • 2026防水接头厂家/电缆接头厂家行业解析与优质选型指南盘点 - 栗子测评
  • SWE benchmark 安装全过程
  • 安全工具篇魔改二开CheckSum8算法Beacon密钥Stager流量生成机制
  • Clawdbot之父:我从不读自己的代码
  • CentOS 7.6 TCP连接奇慢故障排查:中文注释引发的sysctl配置异常
  • Mamba与Conda
  • 老旧CentOS7服务器JVM加载Jar缓慢排查:竟与NTP服务器有关
  • idae使用var或者ctrl+alt+v补全代码时,左侧补全的不是对象类型而是莫名其妙的变成var了,怎么解决
  • 优化 Selenium 使用文本挖掘在分析留言数据中提供了多种应用 如情感分析、主题建模、关键词提取和文本分类
  • Selenium常用于网页爬取 为了提高爬取效率,可以采取以下优化措施:合理使用无头模式
  • 网络爬虫已成为获取互联网数据的重要手段。Selenium 作为一种强大的自动化测试工具,