115 votes

PHP cURL HTTP CODE return 0

Je ne comprends pas que lorsque je fais écho à $httpCode, j'obtienne toujours 0, je m'attendais à 404 lorsque je changeais $html_brand en une url cassée. Y a-t-il quelque chose qui m'échappe ou que je ne connais pas ? Merci.

 //check if url exist
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $html_brand);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 404) {
    echo "The Web Page Cannot Be Found";
    return;
}
curl_close($ch);

107voto

craniumonempty Points 1916

Si vous vous connectez au serveur, vous pouvez obtenir un code de retour, sinon il échouera et vous obtiendrez un 0. Donc, si vous essayez de vous connecter à "www.google.com/lksdfk", vous obtiendrez un code de retour de 400, si vous allez directement sur google.com, vous obtiendrez 302 (et ensuite 200 si vous transférez à la page suivante... enfin, je le fais parce qu'il transfère à google.com.br, donc vous pourriez ne pas l'obtenir), et si vous allez sur "googlecom", vous obtiendrez un 0 (hôte non trouvé), donc avec le dernier, il n'y a personne pour renvoyer un code.

Testé en utilisant le code ci-dessous.

<?php

$html_brand = "www.google.com";
$ch = curl_init();

$options = array(
    CURLOPT_URL            => $html_brand,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER         => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_ENCODING       => "",
    CURLOPT_AUTOREFERER    => true,
    CURLOPT_CONNECTTIMEOUT => 120,
    CURLOPT_TIMEOUT        => 120,
    CURLOPT_MAXREDIRS      => 10,
);
curl_setopt_array( $ch, $options );
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ( $httpCode != 200 ){
    echo "Return code is {$httpCode} \n"
        .curl_error($ch);
} else {
    echo "<pre>".htmlspecialchars($response)."</pre>";
}

curl_close($ch);

94voto

JETM Points 125

Essayez ceci après curl_exec pour voir quel est le problème :

print curl_error($ch);

S'il affiche quelque chose comme "malformé", vérifiez le format de votre URL.

8voto

Daniel Points 11

Vérifier le curl_error après le curl_getinfo pour découvrir les erreurs cachées.

if(curl_errno($ch)){   
    echo 'Curl error: ' . curl_error($ch);
}

7voto

Meldo Points 91

Essayez ça :

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

3voto

CodeCaster Points 38181

Comme dit ici et ci-dessous, une demande échouée ( c'est-à-dire que le serveur n'est pas trouvé ) renvoie false, aucun code d'état HTTP, puisqu'une réponse n'a jamais été reçue.

Appelez curl_error() .

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