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