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

PHP调用REST API无响应求助:新手对接软件API遇阻

问题分析与修复方案

你的代码存在几个关键问题导致请求失败,以下是具体修复点和修正后的代码:

1. 错误的认证方式

你设置了CURLOPT_HTTPAUTH, CURLAUTH_BASIC,但服务商要求的是Bearer Token认证,Basic认证会干扰Bearer头的作用,必须移除这行配置。

2. POST请求未正确序列化JSON

如果后续改用POST方式,直接传递数组给CURLOPT_POSTFIELDS会以application/x-www-form-urlencoded格式发送,不符合Content-Type: application/json要求,需要用json_encode序列化数组。

3. 缺少CURL错误调试

当前代码只判断请求是否执行成功,无法获取具体的CURL错误信息,这对排查问题至关重要。


修正后的代码

function callAPI2($method, $url, $data){
    $curl = curl_init();
    switch ($method){
        case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);
            if ($data) {
                // POST请求需将数据序列化为JSON格式
                curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            }
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
            if ($data) {
                curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            }
            break;
        default:
            if ($data) {
                $url = sprintf("%s?%s", $url, http_build_query($data));
            }
    }

    // 请求配置
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'Authorization: Bearer xxxx', // 替换为你的真实Bearer Token
        'Content-Type: application/json',
    ));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    // 移除错误的Basic认证配置
    // curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

    // 执行请求
    $result = curl_exec($curl);
    
    // 新增CURL错误调试
    if(curl_errno($curl)){
        die("CURL Error: " . curl_error($curl));
    }
    
    if(!$result){
        die("Connection Failure");
    }
    
    curl_close($curl);
    return $result;
};

// GET请求调用示例
$options = array(
    'query' => '(select table).firstname',
);
$make_call = callAPI2('GET', 'https://api.software.com/v1/teams/xxx/databases/xxx/query', $options); 
$test = json_decode($make_call, true);

// 打印原始响应,方便排查问题
echo "原始响应:" . $make_call . "<br>";
var_dump($test);
?>

额外调试建议

  • 替换代码中的xxxx为你的真实Bearer Token,确保Token有效且未过期。
  • 检查teams/xxx/databases/xxx中的xxx是否替换为你的团队和数据库ID。
  • 如果GET请求仍失败,尝试直接拼接URL(跳过http_build_query编码):
    $url = 'https://api.software.com/v1/teams/xxx/databases/xxx/query?query=(select table).firstname';
    $make_call = callAPI2('GET', $url, null);
    
  • 尝试改用POST方式调用,对比结果:
    $options = array(
        'query' => '(select table).firstname',
    );
    $make_call = callAPI2('POST', 'https://api.software.com/v1/teams/xxx/databases/xxx/query', $options);
    

内容的提问来源于stack exchange,提问作者robsn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:15:23