You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用UrlFetchApp调用Clockify API获取报表时出现405错误求助

问题:Clockify API调用返回405 Method Not Allowed错误

调用Clockify详细报表API时收到以下错误:

Exception: Request failed for https://reports.api.clockify.me returned code 405. Truncated server response: {"code":405, "message": "HTTP 405 Method Not Allowed"} (use muteHttpExceptions option to examine full response)

用户使用的代码:

function getTimeReport() {
  
  var body = {"dateRangeStart":"2023-10-05T00:00:00.000Z","dateRangeEnd":"2023-05-05T23:59:59.000Z","detailedFilter":{"page":1,"pageSize":1000,"options":{"totals":"EXCLUDE"}}}
  
  var headers = {
    "headers": {
      "x-Api-Key": "XXX",
      "Content-type": "application/json",
      "Application": "Custom",
      "muteHttpExceptions": "true",
      "Method": "POST",
      "payload": body
    }
  };
  
  var workspaceId = "XXX";
  
  var url = `https://reports.api.clockify.me/v1/workspaces/${workspaceId}/reports/detailed`;
  Logger.log(url);
  var response = UrlFetchApp.fetch(url, headers);
  Logger.log(response);

}

问题根源

  1. 请求参数结构错误:muteHttpExceptions、method、payload是UrlFetchApp的顶层配置参数,不能嵌套在headers对象里。服务器收到默认的GET请求(POST配置未生效),而该API端点仅接受POST请求,因此返回405错误。
  2. 请求方法参数名错误:UrlFetchApp要求请求方法参数为小写的method,而非大写的Method。
  3. 请求体格式错误:直接传入JavaScript对象作为payload,UrlFetchApp会自动转为application/x-www-form-urlencoded格式,但Clockify API需要application/json格式的请求体,必须先将对象转为JSON字符串。
  4. 日期范围逻辑错误:dateRangeStart(2023-10-05)晚于dateRangeEnd(2023-05-05),会导致报表无数据,虽不是405错误的原因,但需修正。

修正后的代码

function getTimeReport() {
  // 修正日期范围:起始日期早于结束日期
  var body = {
    "dateRangeStart": "2023-05-05T00:00:00.000Z",
    "dateRangeEnd": "2023-10-05T23:59:59.000Z",
    "detailedFilter": {
      "page": 1,
      "pageSize": 1000,
      "options": {"totals": "EXCLUDE"}
    }
  };
  
  var options = {
    "method": "POST", // 小写method,作为顶层参数
    "headers": {
      "x-Api-Key": "XXX",
      "Content-Type": "application/json",
      "Application": "Custom"
    },
    "payload": JSON.stringify(body), // 将对象转为JSON字符串
    "muteHttpExceptions": true // 顶层参数,使用布尔值而非字符串
  };
  
  var workspaceId = "XXX";
  var url = `https://reports.api.clockify.me/v1/workspaces/${workspaceId}/reports/detailed`;
  
  Logger.log(url);
  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText()); // 打印完整响应内容
}

关键修正点说明

  • 将原headers变量重命名为options,把method、muteHttpExceptions、payload移至顶层配置。
  • 使用JSON.stringify()转换请求体,确保服务器收到正确的JSON格式数据。
  • 调整日期范围的先后顺序,保证查询逻辑有效。
  • 将muteHttpExceptions设为布尔值true,符合UrlFetchApp的参数要求。

内容的提问来源于stack exchange,提问作者Arif Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:43:13