使用Curl调用ThingsBoard HTTP API时连接被拒绝问题排查
解决ThingsBoard跨主机提交遥测数据时curl连接被拒绝的问题
问题描述
我按照《HTTP API指南》的说明,在Windows Bash环境执行以下curl命令,向运行Ubuntu 20.04的虚拟机上部署的ThingsBoard提交遥测数据:
curl -v -X POST -d "{\"temperature\": 25}" 122.20.192.14/api/v1/Ll6Pfoi5MosB5bC4nUxb/telemetry --header "Content-Type:application/json"
执行后返回错误:
curl(7) Failed to connect to 122.20.192.14 port 80 after 2044 ms: Connection refused
但在虚拟机终端内,用http://localhost:8080替换IP执行等效命令可正常运行。执行ss -anp | grep LISTEN | grep :80得到结果:
tcp LISTEN 0 100 *:8080 *:*
已确认IP地址和设备访问令牌为随机修改,格式问题并非故障原因,查阅相关帖子后仍未解决问题。
解决方案
- 修正访问端口:curl命令默认访问80端口,但ss结果显示ThingsBoard实际监听8080端口。修改命令,明确指定端口:
curl -v -X POST -d "{\"temperature\": 25}" 122.20.192.14:8080/api/v1/Ll6Pfoi5MosB5bC4nUxb/telemetry --header "Content-Type:application/json" - 开放虚拟机防火墙端口:Ubuntu 20.04默认启用ufw防火墙,可能未开放8080端口。在虚拟机终端执行以下命令:
sudo ufw allow 8080/tcp sudo ufw reload - 验证网络连通性:在Windows Bash中执行ping命令,确认主机能访问虚拟机IP:
若ping不通,检查虚拟机网络模式(建议设为桥接模式),确保IP在主机可访问的网段内。ping 122.20.192.14 - 确认服务绑定地址:检查ThingsBoard配置文件(通常路径为
/etc/thingsboard/conf/thingsboard.conf),确认HTTP_BIND_ADDRESS设置为0.0.0.0(表示绑定所有网卡),而非仅127.0.0.1(仅本地可访问)。若修改配置,需重启ThingsBoard服务:sudo systemctl restart thingsboard
内容的提问来源于stack exchange,提问作者Ethan Leonard
相关产品推荐
相关产品推荐

