web-dev-qa-db-ja.com

UrlFetchApp.fetch例外をキャッチする方法

_UrlFetchApp.fetch_からの例外をキャッチする方法はありますか?

response.getResponseCode()を使用して応答コードを確認できると思いましたが、たとえば404エラーが発生した場合、スクリプトが続行されず、_UrlFetchApp.fetch_で停止することができません。

18
louis

編集:このパラメータは現在 ここに記載されています です。

文書化されていない詳細オプション「muteHttpExceptions」を使用して、200以外のステータスコードが返されたときに例外を無効にしてから、応答のステータスコードを調べることができます。詳細と例は この問題 にあります。

23
Eric Koleda

秘訣は、 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
  }
4
Waqar Ahmad

キャッチされたエラーを手動で解析できますが、お勧めしません。例外をキャッチすると(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などの未処理の例外を確実にキャッチしてください。

0
Shay Yzhakov