You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:27:18