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

Python代码转Google Apps Script(GAS)执行报Bad Request错误如何解决

问题原因及解决方法

核心错误原因

  • 请求头未匹配Python原版逻辑:Python使用requests的data参数传空字典时,默认会自动添加Content-Type: application/x-www-form-urlencoded请求头,你的两版GAS代码均未显式指定该请求头,导致API无法识别请求格式
  • payload格式错误:第一版GAS将空对象转为JSON字符串传递,相当于发送JSON格式请求,和原Python逻辑不符;第二版直接传递空JS对象,GAS会默认将其封装为multipart/form-data格式,同样和原请求格式不匹配
  • 调试逻辑不合理:你虽然开启了muteHttpExceptions参数,但没有先打印原始响应状态码和返回内容,直接执行JSON解析,无法拿到API返回的具体错误提示

修正后的GAS代码

function sending() {
  var requestId = "*************************";
  var STAGING_KEY = "abcdefghijklmn";
  var url = "http://myapi/internal/ocr/" + requestId + "/ng";
  // 和原Python逻辑一致,传空字符串作为payload
  var payload = "";
  var options = {
    'muteHttpExceptions': true,
    'method': 'post',
    'payload': payload,
    'headers': {
      'X-Authorization': STAGING_KEY,
      // 显式指定和Python请求一致的Content-Type
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  };
  try {
    var response = UrlFetchApp.fetch(url, options);
    // 先打印状态码和原始返回内容,方便后续排查问题
    Logger.log("响应状态码:" + response.getResponseCode());
    Logger.log("原始返回内容:" + response.getContentText());
    var result = JSON.parse(response.getContentText());
    if (result && result["id"]) {
      return 'sent';
    } else {
      Logger.log('error1: 返回结果无id字段');
    }
  } catch (e) {
    Logger.log('error2: ' + e.toString());
  }
}

额外排查建议

  • 如果修改后还是报错,可以提取日志里的状态码和返回内容分析,通常400 Bad Request会伴随具体的错误说明,比如参数缺失、签名错误、请求格式不对等
  • 确认你的GAS运行环境可以正常访问该内网API,部分内网接口会限制访问来源IP,Google Apps Script的出口IP是谷歌的服务器IP,可能会被内网防火墙拦截

内容的提问来源于stack exchange,提问作者Aoki SJ Seonok Yang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:24:01