25

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

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

4

4 に答える 4

32

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

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

于 2012-07-30T20:32:25.897 に答える
28

秘訣はの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ブロックを使用する必要がある場合があります。

于 2016-03-02T14:52:24.403 に答える
3

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
  }
于 2012-07-30T09:37:07.977 に答える
0

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

于 2020-02-12T09:42:25.410 に答える