使用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
相关产品推荐
相关产品推荐

