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

curl访问Home Assistant API正常但UrlFetchApp返回400错误

问题根因
  • Google Apps Script的UrlFetchApp和curl的请求处理逻辑存在差异:当你给GET请求手动设置Content-Type: application/json请求头时,UrlFetchApp会自动为请求附加一个空的JSON格式请求体,而Home Assistant的GET类型API接口不接受任何请求载荷,收到非空请求体时会直接返回400 Bad Request错误。
  • 你的curl请求虽然也带了Content-Type头,但curl不会为GET请求自动追加请求体,所以可以正常调用。
修复方法

GET请求本身不需要携带请求体,直接移除请求头里多余的Content-Type配置即可,额外建议开启异常捕获方便后续调试:

var HOME_ASSISTANT_TOKEN = "longFunkyCodeLikeThisiJ9.eyJpc3Mijk5fQ.0Fpw8I"
var HOME_ASSISTANT_URL = "https://mydevice.duckdns.org:8123/api/"

function testTemp() {
  console.log(getDeviceParameters('sensor.my_special_sensor'));
}

function getDeviceParameters(id) {
  var url = HOME_ASSISTANT_URL + "states/" + id;
  Logger.log(url);
  var bearer = "Bearer " + HOME_ASSISTANT_TOKEN;
  var headers = {
    "Authorization": bearer
  };
  var params = {
    method: 'get',
    headers: headers,
    muteHttpExceptions: true
  };
  const resp = UrlFetchApp.fetch(url, params);
  // 调试阶段可打印状态码排查问题
  Logger.log("响应状态码:" + resp.getResponseCode());
  return resp.getContentText();
}
额外排查项

如果调整后依然无法正常调用,可按以下顺序排查:

  • 将代码中打印的请求url直接复制出来,用接口测试工具携带相同的Authorization头发起请求,确认Home Assistant服务端接口本身可正常访问
  • 如果你使用自签名证书部署Home Assistant,可在params配置中增加validateHttpsCertificates: false跳过证书校验(该配置仅适用于你自己信任的私有服务,请勿对公网服务使用)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:27:19