2012-07-30 15 views
11

¿Hay alguna forma de detectar la excepción de UrlFetchApp.fetch?Cómo atrapar la excepción UrlFetchApp.fetch

pensé que puedo utilizar response.getResponseCode() para comprobar el código de respuesta, pero yo no soy capaz de, por ejemplo, cuando hay un error 404, el guión no continúa y sólo se detienen en UrlFetchApp.fetch

Respuesta

17

Editar: Este parámetro es ahora documented here.

Puede usar la opción avanzada no documentada "muteHttpExceptions" para deshabilitar las excepciones cuando se devuelve un código de estado que no sea 200, y luego inspeccionar el código de estado de la respuesta. Más información y un ejemplo está disponible en this issue.

+1

Gracias, esto es lo que quiero, google debería tener este documento. – louis

+0

Gracias, siempre me olvido de esta característica. – oshliaer

3

¿por qué no utilizar intento de captura y gestionar el error en el bloque de captura

try{ 
    //Your original code, UrlFetch etc 
    } 
    catch(e){ 
    // Logger.log(e); 
    //Handle error e here 
    // Parse e to get the response code 
    } 
+0

Gracias por su rápida respuesta. ¿Es posible averiguar cuál es el código de respuesta cuando hay una excepción? – louis

+0

Recibirá una cadena de error en e que puede analizar para obtener el código de error. –

6

El truco es pasar el parámetro muteHttpExceptions de UrlFetchApp.fetch().

Aquí un ejemplo (no probado):

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)) 
    // ... 
} 

Por alguna razón, si la dirección no está disponible (por ejemplo, el servicio que está intentando usar está abajo) todavía se ve como está lanzando un error por lo que puede necesitar usar un bloque try/catch.

Cuestiones relacionadas