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

Postman中cURL可返回AppSheet数据,PHP调用却返回NULL

问题排查与解决方案

针对你用PHP cURL请求Google AppSheet返回空数据集的问题,以下是实际项目中验证过的排查步骤:

  • 先抓cURL的真实错误
    不要只依赖状态码200,很多隐性错误不会体现在HTTP状态码里,直接打印cURL的错误信息:

    $ch = curl_init($url);
    // 你的其他curl_setopt配置...
    $response = curl_exec($ch);
    
    // 新增错误检查
    if(curl_errno($ch)) {
        die('CURL错误详情: ' . curl_error($ch) . ' | 错误码: ' . curl_errno($ch));
    }
    curl_close($ch);
    

    这能快速定位比如SSL握手失败、请求超时、协议不兼容等问题。

  • 强制指定HTTP/1.1协议
    AppSheet的API对HTTP/2的兼容性存在偶发问题,强制让cURL用HTTP/1.1:

    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    
  • 1:1复制Postman的请求头
    打开Postman的「代码生成器」,选择「PHP - cURL」,直接复制生成的完整代码,不要手动修改或删减请求头。尤其是AppSheet必需的X-AppSheet-Application-Id、Authorization(Bearer Token或Access Key)、Content-Type这些头,必须完全和Postman一致。

  • 处理IIS环境的输出缓冲
    IIS默认的输出缓冲可能截断cURL的返回内容,在执行curl_exec前清空缓冲区:

    ob_clean(); // 清空输出缓冲
    $response = curl_exec($ch);
    

    同时确保CURLOPT_RETURNTRANSFER已设为true,保证返回内容存入变量而非直接输出:

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
  • 禁用系统代理
    IIS环境可能自动走系统代理,而Postman用的是直接连接,添加以下配置强制禁用代理:

    curl_setopt($ch, CURLOPT_PROXY, '');
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    
  • 验证POST请求体格式
    如果是POST请求,确保请求体是标准JSON格式,用json_encode()生成,不要手动拼接字符串:

    $payload = ['Action' => 'Find', 'Properties' => ['Locale' => 'zh-CN']]; // 示例AppSheet请求体
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        // 其他AppSheet专属头
    ]);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:08:17