如何让Thingsboard CE通过API KEY认证定时发送REST GET请求?
解决Thingsboard CE中REST API CALL节点添加API KEY请求头的问题
由于Thingsboard CE默认的REST API CALL节点仅支持BASIC和PEM认证,无法直接适配需要API KEY认证的远程服务器,但可以通过自定义脚本节点实现手动添加请求头的需求,具体步骤如下:
- 替换节点:移除原有的
REST API CALL节点,在规则链中添加脚本节点(Script Node),该节点允许完全自定义HTTP请求的参数。 - 编写Groovy脚本:在脚本节点中编写代码实现带API KEY请求头的GET请求,示例如下(根据服务器要求调整请求头格式):
import org.springframework.web.client.RestTemplate; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; // 配置远程API地址和你的API KEY def apiUrl = "https://your-remote-server-target-api"; def apiKey = "your-valid-api-key"; // 构造请求头 HttpHeaders headers = new HttpHeaders(); // 根据服务器要求的头字段调整,比如X-API-KEY或Authorization等 headers.set("X-API-KEY", apiKey); HttpEntity<String> requestEntity = new HttpEntity<>(headers); RestTemplate restTemplate = new RestTemplate(); // 发送GET请求并获取响应 ResponseEntity<String> response = restTemplate.exchange(apiUrl, HttpMethod.GET, requestEntity, String.class); // 可选:将响应内容存入元数据,供后续节点使用 metadata.put("api_response_body", response.getBody()); return true;
- 定时触发:添加定时节点(Timer Node),设置触发周期为5分钟,将其与脚本节点连接,实现定时请求逻辑。
关键注意事项
- 务必匹配服务器要求的API KEY请求头格式:部分服务器要求API KEY放在
Authorization头中,格式为Bearer <api-key>或ApiKey <api-key>,此时需修改脚本中的头字段和值。 - 添加异常处理(可选):可以在脚本中加入try-catch块,避免请求失败(如网络异常、服务器错误)导致规则链中断。
- 确保Thingsboard服务器具备访问远程服务器的网络权限,避免防火墙或路由规则拦截请求。
内容的提问来源于stack exchange,提问作者Noideas
相关产品推荐
相关产品推荐

