1

我有一个小脚本可以从 Trello API 中提取信息。

当我将完整的 URL 分配给 String 变量时,该脚本工作正常。但是,当我单独传递参数时,我收到错误“请求未经授权的权限”。

工作代码:

var url = "https://api.trello.com/1/boards/57c68c1beaab4c676adfaeb1/lists?key=myTrelloKey&token=myTrelloToken";

  var response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText());

有问题的代码:

var url = "https://api.trello.com/1/boards/57c68c1beaab4c676adfaeb1/lists";

  var options = 
 {
  "key": "myTrelloKey",
  "token": "myTrelloToken",
  "muteHttpExceptions" : true
  };
  
  var response = UrlFetchApp.fetch(url,options);
  Logger.log(response.getContentText());

我试图了解这是否是身份验证问题,但无法解决。我在第二个版本中做错了吗?提前致谢!

4

1 回答 1

1

我相信你目前的情况和目标如下。

  • 从您的问题中,我了解到脚本的Working code:工作原理。
  • 您想使用"key": "myTrelloKey"and"token": "myTrelloToken"作为查询参数。

修改点:

  • UrlFetchApp.fetch(url, params),params没有key和的性质token
    • 我认为这是您的问题的原因。
  • 即使在 中使用了这些值payload,在这种情况下,请求也会变成 POST 方法。
  • 当你想使用"key": "myTrelloKey""token": "myTrelloToken"作为查询参数时,在当前阶段,需要准备一个脚本。
    • 虽然我测试了是否可以直接用于请求体和标头而不是查询参数,但不幸的是,这些都没有成功keytoken似乎这些被用作查询参数。参考

当以上几点反映到您的脚本时,它变成如下。

修改后的脚本:

function myFunction() {
  // This is from https://gist.github.com/tanaikech/70503e0ea6998083fcb05c6d2a857107
  String.prototype.addQuery = function(obj) {
    return this + Object.keys(obj).reduce(function(p, e, i) {
      return p + (i == 0 ? "?" : "&") +
        (Array.isArray(obj[e]) ? obj[e].reduce(function(str, f, j) {
          return str + e + "=" + encodeURIComponent(f) + (j != obj[e].length - 1 ? "&" : "")
        },"") : e + "=" + encodeURIComponent(obj[e]));
    },"");
  }

  var url = "https://api.trello.com/1/boards/57c68c1beaab4c676adfaeb1/lists";
  var query = {
    "key": "myTrelloKey",
    "token": "myTrelloToken",
  };
  var endpoint = url.addQuery(query);
  Logger.log(endpoint); // <--- https://api.trello.com/1/boards/57c68c1beaab4c676adfaeb1/lists?key=myTrelloKey&token=myTrelloToken

  var response = UrlFetchApp.fetch(endpoint, {"muteHttpExceptions" : true});
  Logger.log(response.getContentText());
}

参考:

于 2020-12-25T22:53:15.753 回答