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

使用PHP调用NCDC RESTful Web Service获取数据集失败求助

解决NCDC API请求失败的问题

看起来你在调用NCDC的API时踩了几个RESTful API使用的常见坑,我帮你梳理问题并给出修正后的方案:

问题分析

你的代码里有几个关键错误导致请求无结果:

  • 请求方法错误:获取数据集列表是查询类操作,NCDC的这个接口需要用GET请求,而非POST。
  • Token传递方式错误:NCDC API要求将token放在HTTP请求头的token字段中,不是作为POST表单数据提交。
  • HTTP头设置错误:你设置了Content-type: application/json和错误的Content-length,但实际既没有发送JSON数据,GET请求也不需要这些头信息。
  • JSON解析后的访问错误:你用json_decode($curl_response, TRUE)得到的是关联数组,却用对象的->语法访问属性,这会导致报错或无输出。

修正后的代码

<?php
$token = "你的实际token"; // 替换为你的有效token
$url = "https://www.ncdc.noaa.gov/cdo-web/api/v2/datasets?stationid=COOP:010957"; 

$curl = curl_init($url); 
// 设置curl返回结果而非直接输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
// 显式指定GET请求(curl默认就是GET,这里写出来更清晰)
curl_setopt($curl, CURLOPT_HTTPGET, true); 
// 关键:将token放入请求头
curl_setopt($curl, CURLOPT_HTTPHEADER, [
    'token: ' . $token
]); 

$curl_response = curl_exec($curl); 

// 先检查curl请求是否出错
if(curl_errno($curl)){
    echo "CURL请求错误: " . curl_error($curl);
}
curl_close($curl); 

// 解析JSON并检查解析错误
$json_a = json_decode($curl_response, TRUE); 
if(json_last_error() !== JSON_ERROR_NONE){
    echo "JSON解析失败: " . json_last_error_msg();
    // 打印原始响应,方便排查API返回的异常内容
    echo "\n原始响应内容: " . $curl_response;
} else {
    var_dump($json_a); // 查看返回的结构
    echo "\n"; 
    // 根据NCDC API的返回结构,有效数据在results字段中
    if(isset($json_a['results'])){
        foreach($json_a['results'] as $row){
            // 示例:输出数据集ID和名称
            echo "数据集ID: {$row['id']}, 名称: {$row['name']}\n";
        }
    } else {
        // 如果返回错误信息(比如token无效、权限问题)
        if(isset($json_a['status'])){
            echo "API错误状态: {$json_a['status']}\n";
        }
    }
}
?>

额外提示

  • 建议每次请求后都检查CURL错误和JSON解析错误,能快速定位问题(比如token失效、参数格式错误等)。
  • 可以先用命令行curl测试请求是否正常,确认API返回有效数据后再写PHP代码,比如:
    curl -H "token: 你的token" "https://www.ncdc.noaa.gov/cdo-web/api/v2/datasets?stationid=COOP:010957"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:52:41