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

PHP调用post.rest API遇query参数必填错误求助

解决API调用中"Parameter 'query' is required"的问题

我太懂你被这个问题卡好几天的烦躁了,咱们直接揪出核心问题:你的代码里犯了一个cURL POST请求的典型错误——当你设置Content-Type: application/json时,不能直接把数组传给CURLOPT_POSTFIELDS。

cURL的默认逻辑是:如果CURLOPT_POSTFIELDS接收的是数组,它会自动把请求的Content-Type改成multipart/form-data或者application/x-www-form-urlencoded,这和你手动设置的application/json完全冲突。结果就是API服务器接收到的不是它期望的JSON格式数据,自然识别不到query参数。

修改后的可运行代码

<?php
$curl = curl_init();

// 先构造参数数组,再转成标准JSON字符串
$data = array(
    "query" => "SELECT l.areasymbol, l.areaname, l.lkey, musym, muname, museq, mu.mukey FROM sacatalog sac INNER JOIN legend l ON l.areasymbol = sac.areasymbol AND l.areatypename = 'Non-MLRA Soil Survey Area' INNER JOIN mapunit mu ON mu.lkey = l.lkey AND mu.mukey IN (455997) ",
    "FORMAT" => "JSON"
);
$jsonData = json_encode($data);

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://SDMDataAccess.sc.egov.usda.gov/Tabular/post.rest",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => $jsonData, // 这里传JSON字符串而非数组
    CURLOPT_HTTPHEADER => array(
        "Cache-Control: no-cache",
        "Content-Type: application/json" // 移除Postman-Token,这是Postman专属标识,代码里不需要
    ),
));

// 保存转义后的JSON数据,方便调试检查
file_put_contents('soil_request.json', $jsonData);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
?>

额外调试小贴士

  • 打开生成的soil_request.json文件,确认里面的JSON格式合法,query字段确实存在且有完整的SQL语句
  • 如果还是有问题,可以开启cURL的 verbose 模式,查看实际发送的请求细节:
    curl_setopt($curl, CURLOPT_VERBOSE, true);
    $verboseLog = fopen('curl_debug.log', 'w');
    curl_setopt($curl, CURLOPT_STDERR, $verboseLog);
    
    执行后查看curl_debug.log,确认请求头的Content-Type是否为application/json,以及POST内容是否和你构造的JSON一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:03:14