curl and ping - Comment vérifier si un site web est en hausse ou en baisse?

Je veux vérifier si un site web est en hausse ou en baisse à une instance particulière en utilisant PHP. J'ai appris que curl va récupérer le contenu du fichier mais je ne veux pas lire le contenu du site web. Je veux juste vérifier l'état du site. Est-il possible de vérifier l'état du site? Peut - on utiliser ping pour vérifier l'état? Il me suffit d'obtenir les signaux d'état comme (404, 403, etc.) du serveur. Un petit extrait de code pourrait beaucoup m'aider.

22
demandé sur Nate 2011-01-05 21:20:40

7 réponses

Quelque chose comme ça devrait fonctionner

    $url = 'yoururl';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_exec($ch);
    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if (200==$retcode) {
        // All's well
    } else {
        // not so much
    }
44
répondu Jeff Busby 2011-01-05 18:28:26
function checkStatus($url) {
    $agent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; pt-pt) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27";

    // initializes curl session
    $ch = curl_init();

    // sets the URL to fetch
    curl_setopt($ch, CURLOPT_URL, $url);

    // sets the content of the User-Agent header
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);

    // make sure you only check the header - taken from the answer above
    curl_setopt($ch, CURLOPT_NOBODY, true);

    // follow "Location: " redirects
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

    // return the transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    // disable output verbose information
    curl_setopt($ch, CURLOPT_VERBOSE, false);

    // max number of seconds to allow cURL function to execute
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);

    // execute
    curl_exec($ch);

    // get HTTP response code
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    curl_close($ch);

    if ($httpcode >= 200 && $httpcode < 300)
        return true;
    else
        return false;
}

// how to use
//===================
if ($this->checkStatus("http://www.dineshrabara.in"))
    echo "Website is up";
else
    echo "Website is down";
exit;
9
répondu DNS 2014-06-26 12:43:22
curl -Is $url | grep HTTP | cut -d ' ' -f2
7
répondu ratz 2012-08-28 07:57:54

Avez-vous vu la fonction get_headers ()? http://it.php.net/manual/en/function.get-headers.php . Il semble faire exactement ce dont vous avez besoin.

Si vous utilisez curl directement avec le drapeau-I, il retournera les en-têtes HTTP (404 etc) au lieu de la page HTML. En PHP, l'équivalent est l'option curl_setopt($ch, CURLOPT_NOBODY, 1);.

5
répondu mikel 2011-01-05 18:29:56

Voici comment je l'ai fait. J'ai défini l'agent utilisateur pour minimiser les chances que la cible me bannisse et j'ai également désactivé la vérification SSL puisque je connais la cible:

private static function checkSite( $url ) {
    $useragent = $_SERVER['HTTP_USER_AGENT'];

    $options = array(
            CURLOPT_RETURNTRANSFER => true,      // return web page
            CURLOPT_HEADER         => false,     // do not return headers
            CURLOPT_FOLLOWLOCATION => true,      // follow redirects
            CURLOPT_USERAGENT      => $useragent, // who am i
            CURLOPT_AUTOREFERER    => true,       // set referer on redirect
            CURLOPT_CONNECTTIMEOUT => 2,          // timeout on connect (in seconds)
            CURLOPT_TIMEOUT        => 2,          // timeout on response (in seconds)
            CURLOPT_MAXREDIRS      => 10,         // stop after 10 redirects
            CURLOPT_SSL_VERIFYPEER => false,     // SSL verification not required
            CURLOPT_SSL_VERIFYHOST => false,     // SSL verification not required
    );
    $ch = curl_init( $url );
    curl_setopt_array( $ch, $options );
    curl_exec( $ch );

    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return ($httpcode == 200);
}
4
répondu Daniel Szalay 2014-06-27 07:59:22

ping ne fera pas ce que vous cherchez - il vous dira seulement si la machine est en marche (et répond à ping). Cela ne signifie pas nécessairement que le serveur web est en place, cependant.

Vous pouvez essayer d'utiliser la méthode http_head - elle récupérera les en-têtes que le serveur web vous renvoie. Si le serveur renvoie des en-têtes, vous savez qu'il est opérationnel.

4
répondu girasquid 2018-05-30 15:15:59

Vous ne pouvez pas tester un serveur Web avec ping, car c'est un service différent. Le serveur peut s'exécuter, mais le démon du serveur web peut être écrasé de toute façon. Donc curl est ton ami. Ignorez simplement le contenu.

2
répondu KingCrunch 2011-01-05 18:25:30