使用ECL的HTTPCALL调用API时出现错误求助
问题排查与修正方案
核心问题分析
你的ECL代码存在三个关键问题,导致HTTPCALL调用失败但Postman正常:
- 用XPATH解析JSON响应:目标API返回的是JSON格式数据,但你在HTTPCALL中指定了
XPATH('/')解析方式,同时RECORD字段用了{xpath('aqi')}注解,完全不匹配响应格式。 - Token占位符未替换:URL中的
{token}是占位符,未替换为aqicn提供的实际有效Token(Postman中你应该已经替换了正确Token,所以能正常运行)。 - 响应结构定义错误:API返回的
aqi是单个数值,而非数据集,原代码用DATASET(Forcast_Rec)包裹是错误的。
修正后的代码
IMPORT STD; EXPORT callAirNow() := FUNCTION /* This is a API call from https://aqicn.org/ Web Services API https://aqicn.org/json-api/doc/ */ // 定义匹配JSON响应的记录结构 AQI_Rec := RECORD INTEGER aqi {json('data.aqi')}; // 直接映射JSON路径data.aqi END; // 替换为你的实际有效Token actual_token := 'your_real_token_here'; URL := 'https://api.waqi.info/feed/geo:10.3;20.7/?token=' || actual_token; // 使用JSON解析方式调用API MakeCall := HTTPCALL(URL, 'GET', 'application/json', AQI_Rec, JSON()); RETURN MakeCall; END; output(callAirNow());
关键修改说明
- 切换到JSON解析:将HTTPCALL的最后一个参数改为
JSON(),同时RECORD字段使用{json('data.aqi')}注解,直接映射API返回的JSON结构。 - 替换Token占位符:将
{token}替换为你从aqicn获取的实际Token,确保请求身份验证有效。 - 调整记录结构:因为API返回的
aqi是单个数值,无需用数据集包裹,直接定义包含aqi字段的记录即可。
内容的提问来源于stack exchange,提问作者Vipin Katara
相关产品推荐
相关产品推荐

