219 votes

Obtenir le code HTTP en PHP avec curl

J'utilise CURL pour obtenir l'état d'un site, s'il est en service ou non ou s'il redirige vers un autre site. Je veux que cela soit aussi simple que possible, mais cela ne fonctionne pas bien.

<?php
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

return $httpcode;
?>

J'ai mis cela dans une fonction. Cela fonctionne bien mais les performances ne sont pas les meilleures parce qu'il télécharge la page entière, ce qui est le cas si je supprime la fonction $output = curl_exec($ch); il retourne 0 tout le temps.

Quelqu'un sait-il comment améliorer les performances ?

3voto

Explosion Pills Points 89756

curl_exec est nécessaire. Essayez CURLOPT_NOBODY pour ne pas télécharger le corps. Ça pourrait être plus rapide.

0voto

Shamim Points 31

Utiliser ce hitCurl pour récupérer tous les types de réponses de l'API, à savoir Obtenir / Poster

        function hitCurl($url,$param = [],$type = 'POST'){
        $ch = curl_init();
        if(strtoupper($type) == 'GET'){
            $param = http_build_query((array)$param);
            $url = "{$url}?{$param}";
        }else{
            curl_setopt_array($ch,[
                CURLOPT_POST => (strtoupper($type) == 'POST'),
                CURLOPT_POSTFIELDS => (array)$param,
            ]);
        }
        curl_setopt_array($ch,[
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
        ]);
        $resp = curl_exec($ch);
        $statusCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        curl_close($ch);
        return [
            'statusCode' => $statusCode,
            'resp' => $resp
        ];
    }

Fonction de démonstration pour tester l'API

 function fetchApiData(){
        $url = 'https://postman-echo.com/get';
        $resp = $this->hitCurl($url,[
            'foo1'=>'bar1',
            'foo2'=>'bar2'
        ],'get');
        $apiData = "Getting header code {$resp['statusCode']}";
        if($resp['statusCode'] == 200){
            $apiData = json_decode($resp['resp']);
        }
        echo "<pre>";
        print_r ($apiData);
        echo "</pre>";
    }

-4voto

christian Nguyen Points 810

Voici ma solution pour obtenir Status Http afin de vérifier régulièrement l'état du serveur.

$url = 'http://www.example.com'; // Your server link

while(true) {

    $strHeader = get_headers($url)[0];

    $statusCode = substr($strHeader, 9, 3 );

    if($statusCode != 200 ) {
        echo 'Server down.';
        // Send email 
    }
    else {
        echo 'oK';
    }

    sleep(30);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X