【问题标题】:Set timeout value for Urlfetchapp.fetch function设置 Urlfetchapp.fetch 函数的超时值
【发布时间】:2019-01-26 02:58:44
【问题描述】:

我正在尝试使用 Urlfetchapp.fetch 函数将 json 有效负载发布到 url 并接收该请求的 json 响应。

示例代码:

var url = "https://example.com/RST/myapi";
var accessToken = getAccessToken();
var headers = {
  "Authorization": "Bearer " + accessToken
};
var options = {
  "headers": headers,
  "method" : "POST",
  "contentType" : "application/json",
  "payload" : '{ "Name": "Mark" }',
  "muteHttpExceptions": true
};

var response = UrlFetchApp.fetch(url, options);

但是,我的请求因超时错误而中断。有人告诉我,由于 API 资源繁重,请求可能需要 3 分钟才能返回响应,具体取决于服务器状态。

有没有办法改变这个超时限制?让它等待至少 3 分钟,直到收到任何回复?

编辑:我刚刚被告知 API 服务没有回调 url 参数,但是在重试时它可能会更快地响应。但我不知道该怎么做?它不是我可以捕捉和检查的响应错误。但是超时错误意味着在那之后什么都不会执行

感谢您的帮助。

【问题讨论】:

  • 如果 API 支持回调 url 参数,例如一个将结果发回的 URL,您可以为您的脚本项目创建一个 webapp 并传递其 url。你需要拆分你的脚本来支持异步行为,但是对于 JavaScript 来说这有点正常 ;) 因为他们知道他们对某些请求的 API 很慢,所以他们可能支持这样的操作。
  • @tehhowch 感谢您的建议。我会调查一下。我以前从未做过 webapp,但应该很容易。如果我有问题,希望我能回到这里询问更多:)
  • 我刚刚被告知 API 服务没有回调 url 参数,但是在重试时它可能会更快地响应。但我不知道该怎么做。它不是响应错误,而是超时错误,这意味着在那之后什么都不会执行。
  • 可以将异常静音,查看请求的状态码。如果失败,您可以重新查询端点。或者,将您的 .fetch 包装在 try-catch 块中。
  • 尝试 catch 也不起作用,正如您在我的示例代码中看到的那样,我也将 muteHttpExceptions 设置为 true。我还在同一执行中删除了任何其他 API 调用。仍然得到同样的错误,Exception: Timeout: www.example.com。此外,它会在一分钟内给出超时异常,而脚本应该运行至少 6 分钟。

标签: javascript google-apps-script timeout urlfetch


【解决方案1】:

检查GAS Quotas

脚本运行时间为 6 分钟,因此超过 3 分钟,如果您的 API 响应时间超过 6 分钟,则 GAS 将停止该功能

【讨论】:

  • 谢谢,我认为超时错误不会在 6 分钟后再次出现。它通常在此之前,大约 2-5 分钟。
  • 遇到了同样的错误。正好1分钟。看起来 UrlFetchApp 有未记录的不可更改的超时时间。
猜你喜欢
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
相关资源
最近更新 更多