_UrlFetchApp.fetch
_からの例外をキャッチする方法はありますか?
response.getResponseCode()
を使用して応答コードを確認できると思いましたが、たとえば404エラーが発生した場合、スクリプトが続行されず、_UrlFetchApp.fetch
_で停止することができません。
編集:このパラメータは現在 ここに記載されています です。
文書化されていない詳細オプション「muteHttpExceptions」を使用して、200以外のステータスコードが返されたときに例外を無効にしてから、応答のステータスコードを調べることができます。詳細と例は この問題 にあります。
秘訣は、 UrlFetchApp.fetch()
のmuteHttpExceptions
パラメータを渡すことです。
ここに例(未テスト):
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()it、および返されるオブジェクトは、api呼び出しから返されるエラーになります。
muteHttpExceptions
を超えて提案するのではなく、この方法でエラーオブジェクトを取得するための最良の方法を示したかっただけです。
とにかく、UrlFetchApp.fetch()
呼び出しをキャッチして、404などの未処理の例外を確実にキャッチしてください。