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

使用UrlFetchApp请求API时出现Bad request错误如何解决

UrlFetchApp请求API返回Bad Request 排查方案

已定位的显性问题

  • 格式错误:Authorization请求头中Bearer和access token之间存在2个空格,不符合OAuth 2.0的标准头格式,服务端解析token时会直接判定请求无效,返回400错误。标准格式要求Bearer与token之间仅保留1个半角空格。
  • 逻辑冗余:代码在权限校验前就提前打印授权地址和token,未授权场景下会打印无效值,干扰排查。
  • 缺少异常判断:拿到响应后未校验HTTP状态码直接解析JSON,请求失败时无法定位具体错误原因。
  • 缺少必要请求头:未显式声明Accept头,部分后端框架会校验该字段,未匹配要求的返回格式时会直接拒绝请求。

其他潜在触发原因

  • access token本身无效:存在过期、授权scope不覆盖目标接口、token被吊销等情况,即使service.hasAccess()返回true,也可能因为token缓存问题拿到无效值。
  • 接口缺少必填参数:目标/get_graph_data接口为GET请求,若要求必传查询参数(如时间范围、数据维度、节点ID等),未携带时会返回Bad Request。
  • 重定向异常:自动跟随重定向时如果丢失Authorization头,跳转到鉴权地址也会返回400错误。

修复后代码

function run() {
  const service = getOAuthService();
  // 优先判断权限,未授权直接输出授权地址终止执行
  if (!service.hasAccess()) {
    const authorizationUrl = service.getAuthorizationUrl();
    Logger.log(`打开以下URL完成授权后重新运行脚本: ${authorizationUrl}`);
    return;
  }

  const accessToken = service.getAccessToken();
  Logger.log("当前使用的access token:", accessToken);

  const url = 'https://ffa-int-service-lnhtqfum-zgvbwhku.apps.dev.aro.forgeapp.honeywell.com/get_graph_data';
  const options = {
    method: 'GET',
    headers: {
      // 修复Bearer后多余空格问题,补充Accept头
      'Authorization': `Bearer ${accessToken}`,
      'Accept': 'application/json'
    },
    muteHttpExceptions: true,
    followRedirects: true
  };

  const response = UrlFetchApp.fetch(url, options);
  const responseCode = response.getResponseCode();
  const responseText = response.getContentText();
  
  // 先判断状态码再处理结果
  if (responseCode >= 400) {
    Logger.log(`请求失败,状态码: ${responseCode},服务端返回: ${responseText}`);
    return;
  }

  const result = JSON.parse(responseText);
  Logger.log("请求成功,返回数据:", JSON.stringify(result, null, 2));
}

后续排查步骤

如果替换代码后仍报错,按以下顺序排查:

  • 核对接口文档,确认GET请求需要的所有查询参数,将参数按key=value格式拼接到URL末尾,多个参数用&连接
  • 单独拷贝日志中打印的access token,用接口调试工具直接请求接口,确认token本身是否有效
  • 暂时将followRedirects设为false,打印响应头的Location字段,确认是否存在重定向丢头的问题
  • 临时关闭muteHttpExceptions(设为false),查看脚本运行时抛出的完整错误栈,获取服务端返回的具体错误字段

内容的提问来源于stack exchange,提问作者Sumedh Bhagat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:54:38