如何配置CURLOPT_URL同时请求两个API接口获取VPS及独立服务器数据
适配双接口的代码修改方案
修改逻辑
原代码重复编写了相同的cURL请求逻辑,且把VPS接口路径硬编码在方法内,要同时支持VPS、独立服务器两个列表接口,不需要重复写请求代码,只需要:
- 抽离公共请求方法,统一处理鉴权、cURL参数配置、响应解析,减少冗余代码
- 保留原有
getList()方法兼容旧业务,新增独立服务器列表的获取方法 - 后续新增其他接口时可以直接复用公共请求方法,降低维护成本
修改后完整代码
if (!defined("WHMCS")) die("This file cannot be accessed directly"); use Illuminate\Database\Capsule\Manager as Capsule; class FKL { public $apikey = ''; public $apiurl = 'https://api2.example.com/'; public function __construct($apikey = '') { $this->apikey = $apikey; } /** * 内部公共请求方法 * @param string $endpoint 接口路径 * @return array|null */ private function request($endpoint) { $sendparams = [ 'APIKey' => $this->apikey ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->apiurl . ltrim($endpoint, '/')); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($sendparams, JSON_PRETTY_PRINT)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Accept: application/json', 'Content-Type: application/json' ]); $result = curl_exec($ch); $curlErr = curl_error($ch); curl_close($ch); if ($result && !$curlErr) { $parsed = json_decode($result, true); return $parsed['data'] ?? null; } return null; } /** * 获取VPS列表(保留原方法名,兼容原有业务调用) * @return array|null */ public function getList() { return $this->request('service/vps/list'); } /** * 新增:获取独立服务器列表 * @return array|null */ public function getDedicatedList() { return $this->request('service/dedicated/list'); } /** * 获取VPS操作系统列表 * @return array|null */ public function getOSList() { return $this->request('service/vps/os'); } // 其余原有方法均可参考上述逻辑,调用request方法传入对应接口路径即可 }
使用说明
- 原有调用
getList()的业务代码不需要做任何改动,依然可以正常拉取VPS服务数据 - 需要获取独立服务器数据时,直接实例化类后调用
getDedicatedList()方法即可 - 如果后续需要对接独立服务器的其他接口(例如操作系统列表、电源控制等),只需要新增对应方法,传入对应接口路径调用公共
request()方法即可,不需要重复编写cURL配置逻辑
如果需要一次性获取全量服务列表,可以自行新增方法,同时调用
getList()和getDedicatedList()后合并结果返回。
内容的提问来源于stack exchange,提问作者Philip
相关产品推荐
相关产品推荐

