google 应用脚本 post 大本营

google apps script post basecamp

我正在尝试通过 Google Apps 脚本调用 Basecamp 的新 API。 GET,我能做到。 POST,没那么多。

从路径开始

https://basecamp.com/xxxxxxx/api/v1/projects/xxxxxxx/todolists.json

我的代码:

var headers = {
  'User-Agent' : BCuseragent, 
  'Authorization' : 'Basic ' +  Utilities.base64Encode(BCuser + ':' + BCpass),
  'Content-Type' : 'application/json',
  'Accept' : 'application/json',
  'validateHttpsCertificates' : false
 }

function getBC(path) {
  var url = BCurl + path;
  var opt = {
    'headers' : headers,
    'method' : "GET"
  };

  var response = UrlFetchApp.fetch(url, opt);
  return response;
}


function postBC(path, payload) {
  var url = BCurl + path;

  var opt = {
    'headers' : headers,
    'method' : "POST",
    'payload' : JSON.stringify(payload)
  };
  var response = UrlFetchApp.fetch(url, opt);
  return response;
}

我作为参数传递的负载:

{name: "foo", description: "bar"}

getBC 函数有效(200 OK),postBC 函数 returns 出现 403 错误。然而我是该项目的所有者,我已经使用 curl 和一个 Chrome REST 客户端来确认我实际上可以 POST 这个项目的新 todolists 使用相同的授权。

显然,我的 headers 某处格式不正确,但我看不出是怎么回事。

这是 UrlFetchApp 的一个怪癖。您不能使用通用 "headers" 参数设置 Content-Type,而必须使用 "contentType" 参数。

请在此处查看 "Advanced Parameters" table:

https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String,Object)