Cómo comprobar si un webservice está online

En el proyecto actual donde estoy trabajando, tenemos el sistema configurado con varias pasarelas de pago. Hay una que es la principal y por la cual se hacen el 90% de las transacciones diarias, pero es cierto que hay veces en las que este servicio se ve interrumpido o simplemente se ha caído.

He encontrado varias formas de verificar el estado de un webservice. Todas funcionan a la perfección cuando está online, pero cuando se encuentra offline viene el problema…

Mi solución personal:

function checkURL($url) {
     // Primero, compruebo si la URL es una URL valida
     if(!filter_var($url, FILTER_VALIDATE_URL)) {
          return 0;
     }

     // Inicializo y configuro una peticion con CURL
     $curlInit = curl_init($url);

     // Limito el tiempo de espera en 5 segundos y configuro las opciones
     curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 5); 
     curl_setopt($curlInit, CURLOPT_HEADER, true);
     curl_setopt($curlInit, CURLOPT_NOBODY, true);
     curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true);

     // Obtengo una respuesta
     $response = curl_exec($curlInit);
     curl_close($curlInit);

     if ($response) return 1;
     return 0;
}

// Forma de uso
$url = "http://www.google.com";
echo checkURL($url);

La ventaja está en la línea curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 5); ya que me permite tener un tiempo de espera bastante prudente, de manera que, si en cinco segundos no responde el servicio, paso automáticamente al siguiente sin “molestar” mucho al usuario.

Saludos!

Anuncios
A %d blogueros les gusta esto: