【问题标题】:Apps Script API returning 404 error for existing project. Error returned as HTML rather than JSONApps Script API 为现有项目返回 404 错误。错误返回为 HTML 而不是 JSON
【发布时间】:2019-04-16 12:58:20
【问题描述】:

我试图使用 Apps Script API 运行 Apps Script 函数。我在控制台中设置了脚本,并为脚本创建了一个 oauth 客户端 ID。我配置了授权屏幕并将脚本部署为 API 可执行文件。我测试了在同一个脚本中调用的 api 函数,但出现 404 错误:

在此服务器上找不到请求的 URL /v1/scripts/{{my_script_id}}:run。

响应以 HTML 格式返回。我还注意到,当从 API 调用该脚本时,它似乎生成了自己的客户端 ID。

我尝试禁用并重新启用不起作用的 API。我认为调用应用程序不在同一个项目中可能是个问题,但我不确定如何做到这一点,因为 Google 文档不清楚。

function trigger(){
  var bogus = DriveApp.getRootFolder();
  var argument = ["Value0", "Value1", "Value2", "Value3", "Value4", "Value5"]; 

  //         https://www.googleapis.com/auth/script.external_request
  //         https://www.googleapis.com/auth/spreadsheets

 var postRequest = {
    "Content-Type": "application/json",
    "headers": { "Authorization" : "Bearer " + ScriptApp.getOAuthToken()},
    "function": "setStatus",
    "muteHttpExceptions": true,
    "parameters": [argument],
    "devMode": false
 };

  try{
    var response = UrlFetchApp.fetch("https://script.googleapis.com/v1/scripts/{{my_script_id}}:run", postRequest);
    Logger.log(response);
  }catch(err){
    Logger.log(err);
  }
}

我预计 JSON 形式的某种形式的错误,甚至可能是函数运行,我得到的是一个 HTML 文档,它在显示时显示 404 错误。

【问题讨论】:

    标签: google-apps-script google-apps-script-api


    【解决方案1】:

    你不是POSTing 请求。默认.fetch 方法是GET

    将此添加到postRequest 对象中:

    method: "POST",
    

    您的postRequest 中也缺少payload

    片段:

    var postRequest = {
        "method":"POST", //added
        "contentType": "application/json", //key changed
        "headers": { "Authorization" : "Bearer " + ScriptApp.getOAuthToken()},
        "muteHttpExceptions": true,
         "payload": JSON.stringify({   //added
          "function": "setStatus",
          "parameters": argument, //removed []
          "devMode": false
        })
     };
    

    参考资料:

    【讨论】:

    • 感谢您的回复,它不再返回 HTML。但是它给出了这个错误: { "error": { "code": 400, "message": "Request contains an invalid argument.", "status": "INVALID_ARGUMENT" } } 这是在更新请求后如下: { 方法:“POST”,“Content_Type”:“application/json”,“headers”:{“Authorization”:“Bearer” + ScriptApp.getOAuthToken()},“function”:“updateStatus”,muteHttpExceptions:true,参数: 争论 };关于可能导致这种情况的任何想法?
    • @Tommy parameters 和请求正文中的其他内容必须在 payload 中。查看 UrlFetchApp 文档。如果您在阅读文档后仍然遇到问题,请使用新代码和错误编辑您的问题或提出新问题。
    猜你喜欢
    • 2019-10-17
    • 2018-10-29
    • 1970-01-01
    • 2010-11-04
    • 2018-03-03
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 2014-05-29
    相关资源
    最近更新 更多