在Google Apps Script中调用Wunderlist API遇'invalid request'错误求助
问题分析与解决方案
我来帮你排查这个问题——核心原因出在GET请求的参数传递方式上,咱们一步步理清楚:
错误根源
你的curl命令是通过URL查询字符串传递list_id参数(?list_id=my-list-id),这完全符合Wunderlist Tasks API的要求;但在Google Apps Script代码里,你错误地把list_id和completed放到了payload中,并且给GET请求设置了这个payload。
HTTP规范中,GET请求本身不应该携带请求体(payload),虽然部分客户端支持这种写法,但Wunderlist的API并不接受这种参数传递方式,这就是你收到invalid request错误的直接原因。
你调用getLists接口成功,是因为该接口不需要额外参数,只需要请求头,没有涉及参数传递的问题,所以能正常运行。
修正后的代码
把参数拼接成URL查询字符串,移除GET请求的payload即可:
var accessToken = 'my-access-token'; var clientID = 'my-client-id'; var url = 'https://a.wunderlist.com/api/v1/'; var headers = { 'X-Access-Token': accessToken, 'X-Client-Id': clientID }; function getTasks(listId){ // 将筛选参数拼接为URL查询字符串 var queryParams = `list_id=${listId}&completed=true`; var options = { "method" : 'get', "headers" : headers // 移除GET请求的payload }; var response = UrlFetchApp.fetch(`${url}tasks?${queryParams}`, options); return response; } function main(){ // 注意:listId如果是字符串需要加引号,如'my-list-id' var result = getTasks('my-list-id'); }
补充说明
- 移除了
Content-Type请求头:GET请求没有请求体,这个头是多余的,保留也不会报错,但没必要。 - 保持和curl一致的参数传递逻辑:通过URL查询字符串传递筛选条件,完全匹配Wunderlist API的要求。
- main函数的
listId格式注意:如果是字符串类型的ID,必须添加单/双引号;如果是数字ID直接传入数字即可。
这样修改后,你的请求逻辑就和curl完全一致了,应该能正常获取任务数据。
内容的提问来源于stack exchange,提问作者I-was-a-Ki




