Как уловить исключение UrlFetchApp.fetch

Есть ли способ уловить исключение из UrlFetchApp.fetch?

Я думал, что могу использовать response.getResponseCode() для проверки кода ответа, но я не могу, например, когда есть ошибка 404, script не продолжить и просто остановиться в UrlFetchApp.fetch

Ответ 1

Изменить: этот параметр теперь задокументирован здесь.

Вы можете использовать недокументированную расширенную опцию "muteHttpExceptions", чтобы отключить исключения, когда возвращается код статуса не-200, а затем проверить код состояния ответа. Более подробную информацию и пример можно найти в этой проблеме.

Ответ 2

Трюк передает параметр 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.

Ответ 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
  }