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

使用Google Apps Script调用NWS GeoJSON API出现500错误求助

解决Google Apps Script调用NWS GeoJSON API返回500错误的问题

这问题我太熟了!之前用Google Apps Script调用NWS的API时也踩过这个500错误的坑,明明浏览器里打开URL一切正常,GAS里就报错,核心原因基本都是请求不符合NWS的API规范,下面给你一步步排查解决的方法:

1. 必须添加User-Agent请求头

NWS的API有硬性要求:所有请求必须包含User-Agent头,用来标识你的应用和联系方式,否则会返回错误(包括500)。浏览器会自动带上这个头,但Google Apps Script默认不会添加,这是最常见的触发原因。

你可以在请求选项里加上这个头,格式建议是应用名称/版本 (联系邮箱),比如:

function fetchNWSAlerts() {
  const apiUrl = "你的NWS GeoJSON API地址";
  const requestOptions = {
    headers: {
      "User-Agent": "MyGASAlertApp/1.0 (your-email@example.com)"
    }
  };

  try {
    const response = UrlFetchApp.fetch(apiUrl, requestOptions);
    const alertData = JSON.parse(response.getContentText());
    Logger.log("获取到警报数据: " + JSON.stringify(alertData));
  } catch (error) {
    Logger.log("请求失败: " + error.message);
    // 捕获HTTP响应详情,帮你定位具体问题
    if (error.response) {
      Logger.log("错误响应内容: " + error.response.getContentText());
    }
  }
}

2. 检查请求参数的编码与格式

有时候GAS里构造的URL参数没有正确编码,比如包含空格、特殊字符的坐标或筛选条件,会导致NWS服务器无法解析请求,返回500错误。

你可以用encodeURIComponent()处理动态参数,比如:

const latitude = 37.7749;
const longitude = -122.4194;
const encodedCoords = encodeURIComponent(`${latitude},${longitude}`);
const apiUrl = `https://api.weather.gov/alerts/active?point=${encodedCoords}`;

3. 获取详细的错误响应内容

不要只看500状态码,NWS通常会在响应体里返回具体的错误原因。在GAS的catch块里打印error.response.getContentText(),能帮你快速定位问题(比如缺少头、参数错误、限流等)。

4. 对比浏览器与GAS的请求差异

把GAS里构造的完整URL和请求头复制出来,用Postman、curl或者浏览器的开发者工具(Network面板)对比两者的请求:

  • 检查是否有缺失的请求头
  • 确认参数是否完全一致
  • 验证请求方法(GET/POST)是否正确

5. 排查API调用限制

虽然500不是典型的限流错误,但NWS的API有调用频率限制(每小时最多500次请求)。如果你的脚本调用过于频繁,也可能触发服务器的异常响应。可以添加重试机制,或者调整调用频率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:29:58