Si se conecta con el servidor, puede obtener un código de retorno, de lo contrario fallará y obtendrá un 0. Por lo tanto, si intenta conectarse a "www.google.com/lksdfk", obtendrá un código de retorno de 400, si va directamente a google.com, obtendrá 302 (y luego 200 si reenvía a la página siguiente ... bueno, lo hago porque reenvía a google.com.br, por lo que es posible que no obtenga eso), y si va a "googlecom" obtendrá un 0 (host no encontrado), por lo que con el último, no hay nadie para devolver un código.
Probado usando el siguiente código.
<?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);
Pruebe esto después de curl_exec para ver cuál es el problema:
Si imprime algo como 'mal formado', verifique el formato de su URL.
fuente
compruebe curl_error después de curl_getinfo para averiguar los errores ocultos.
fuente
Como se dice aquí y a continuación, una solicitud fallida ( es decir, no se encuentra el servidor ) devuelve falso, sin código de estado HTTP, ya que nunca se ha recibido una respuesta.
Llame
curl_error()
.fuente
Tuve el mismo problema y en mi caso esto se debió a que la función curl_exec está deshabilitada en php.ini. Verifique los registros:
La solución es eliminar curl_exec de las funciones deshabilitadas en php.ini en el archivo de configuración del servidor.
fuente
¿Cuál es el contenido exacto que está pasando a $ html_brand?
Si tiene una sintaxis de URL no válida, es muy probable que obtenga el código HTTP 0.
fuente
Prueba esto:
fuente
Otra razón para que PHP devuelva el código http 0 es el tiempo de espera. En mi caso, tenía la siguiente configuración:
curl_setopt ($ http, CURLOPT_TIMEOUT_MS, 500);
Resultó que la solicitud al punto final al que apuntaba siempre tomaba más de 500 ms, siempre se agotaba y siempre devolvía el código http 0.
Si elimina esta configuración (CURLOPT_TIMEOUT_MS) o coloca un valor más alto (en mi caso 5000), obtendrá el código http real, en mi caso un 200 (como se esperaba).
Ver https://www.php.net/manual/en/function.curl-setopt.php
fuente