有什么办法可以捕捉到异常UrlFetchApp.fetch
吗?
我以为我可以response.getResponseCode()
用来检查响应代码,但我不能,例如当出现 404 错误时,脚本不会继续,只是停在UrlFetchApp.fetch
有什么办法可以捕捉到异常UrlFetchApp.fetch
吗?
我以为我可以response.getResponseCode()
用来检查响应代码,但我不能,例如当出现 404 错误时,脚本不会继续,只是停在UrlFetchApp.fetch
muteHttpExceptions
诀窍是传递UrlFetchApp.fetch()
.
这是一个示例(未经测试):
var payload = {"value": "key"}
var response = UrlFetchApp.fetch(
url,
{
method: "PUT",
contentType: "application/json",
payload: JSON.stringify(payload),
muteHttpExceptions: true,
}
);
var responseCode = response.getResponseCode()
var responseBody = response.getContentText()
if (responseCode === 200) {
var responseJson = JSON.parse(responseBody)
// ...
} else {
Logger.log(Utilities.formatString("Request failed. Expected 200, got %d: %s", responseCode, responseBody))
// ...
}
出于某种原因,如果 URL 不可用(例如,您尝试使用的服务已关闭),它看起来仍然会引发错误,因此您可能仍需要使用try/catch
块。
为什么不使用 try catch 并处理 catch 块中的错误
try{
//Your original code, UrlFetch etc
}
catch(e){
// Logger.log(e);
//Handle error e here
// Parse e to get the response code
}
您可以手动解析捕获的错误,但不建议这样做。捕获异常时(如果muteHttpExceptions
关闭则抛出异常),错误对象将采用以下格式:
{
"message": "Request failed for ___ returned code___. Truncated server response: {___SERVER_RESPONSE_OBJECT___} (use muteHttpExceptions option to examine full response)",
"name": "Exception",
"fileName": "___FILE_NAME___",
"lineNumber": ___LINE_NUMBER___,
"stack": "___STACK_DETAILS___"
}
如果您出于某种原因不喜欢使用muteHttpExceptions
,则可以捕获异常e
,查看e.message
“截断服务器响应:”和“(使用 muteHttpExceptions 选项检查完整响应)”之间的文本、JSON.parse() 和返回的对象将是从 api 调用返回的错误。
我不会建议它muteHttpExceptions
,只是想展示以这种方式获取错误对象的最佳方法。
无论如何,试着捕捉你的UrlFetchApp.fetch()
电话,以确保你捕捉到未处理的异常,比如 404。