web-dev-qa-db-fra.com

PHP cURL HTTP CODE renvoie 0

Je ne comprends pas quand j'écho $ httpCode J'ai toujours 0, je m'attendais à 404 quand je change $ html_brand en une URL cassée. Y at-il quelque chose qui me manque 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);
85
Ardeus

Si vous vous connectez au serveur, vous pouvez obtenir un code retour, sinon il échouera et vous obtiendrez un 0. Si vous essayez de vous connecter à "www.google.com/lksdfk", vous obtiendrez un code retour de 400, si vous allez directement sur google.com, vous obtiendrez 302 (puis 200 si vous transférez à la page suivante ... eh bien je le fais parce que cela transfère à google.com.br, de sorte que vous pourriez ne pas l'obtenir), et si vous allez sur "googlecom" vous obtiendrez un 0 (hôte introuvable), 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);
82
craniumonempty

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

print curl_error($ch);

Si vous imprimez quelque chose comme "malformé", vérifiez votre format d'URL.

64
Hereblur

vérifiez le curl_error après le curl_getinfo pour trouver les erreurs cachées.

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

J'ai eu le même problème et dans mon cas c'était parce que la fonction curl_exec est désactivée dans php.ini. Vérifiez les journaux:

PHP Warning:  curl_exec() has been disabled for security reasons in /var/www/***/html/test.php on line 18

Supprimez curl_exec des fonctions désactivées dans le fichier php.ini sur le fichier de configuration du serveur.

2
Gondy

Quel est le contenu exact que vous passez dans $ html_brand?

Si sa syntaxe d'URL est incorrecte, vous obtiendrez très probablement le code HTTP 0.

1
psynnott

Comme dit ici et ci-dessous, une requête ayant échoué (, c’est-à-dire que le serveur n’a pas été trouvé ) renvoie false, pas de code d’état HTTP, depuis une réponse n'a jamais été reçu.

Appelez curl_error() .

1
CodeCaster