Si vous vous connectez au serveur, vous pouvez obtenir un code de retour de celui-ci, 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 (puis 200 si vous passez à la page suivante ... eh bien je le fais car il redirige vers google.com.br, donc vous risquez de 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é à l'aide du 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);
Essayez ceci après curl_exec pour voir quel est le problème:
S'il est imprimé quelque chose comme «malformé», vérifiez le format de votre URL.
la source
vérifiez le curl_error après le curl_getinfo pour découvrir les erreurs cachées.
la source
Comme dit ici et ci-dessous, une requête échouée ( c'est-à-dire que le serveur n'est pas trouvé ) retourne false, pas de code d'état HTTP, puisqu'une réponse n'a jamais été reçue.
Appelez
curl_error()
.la source
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:
La solution consiste à supprimer curl_exec des fonctions désactivées dans php.ini sur le fichier de configuration du serveur.
la source
Quel est le contenu exact que vous transmettez à $ html_brand?
Si la syntaxe d'URL est invalide, vous obtiendrez très probablement le code HTTP 0.
la source
Essaye ça:
la source
Une autre raison pour laquelle PHP renvoie le code http 0 est le timeout. Dans mon cas, j'avais la configuration suivante:
curl_setopt ($ http, CURLOPT_TIMEOUT_MS, 500);
Il s'est avéré que la demande au point final vers lequel je pointais prenait toujours plus de 500 ms, expirait toujours et retournait toujours le code http 0.
Si vous supprimez ce paramètre (CURLOPT_TIMEOUT_MS) ou mettez une valeur plus élevée (dans mon cas 5000), vous obtiendrez le code http réel, dans mon cas un 200 (comme prévu).
Voir https://www.php.net/manual/en/function.curl-setopt.php
la source