我正试图通过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
函数返回403
错误。然而,我是该项目的所有者,我使用curl和Chrome REST客户端来确认我实际上可以使用相同的授权向这个项目发布新的todolists。
显然,我的标题在某处格式不正确,但我看不清楚。
答案 0 :(得分:1)
这是UrlFetchApp的一个怪癖。您无法使用常规"标题"设置内容类型。参数,你必须使用" contentType"参数。
参见"高级参数"这里的表格:
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String,Object)