Pregunta CURL PHP CÓDIGO HTTP return 0


No entiendo cuando echo $ httpCode Siempre obtengo 0, esperaba 404 cuando cambio $ html_brand en una URL rota. ¿Hay algo que extraño o no sé? Gracias.

 //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);

74
2018-04-19 12:16


origen


Respuestas:


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 vas directamente a google.com, obtendrás 302 (y luego 200 si pasas a la siguiente página ... bueno, lo hago porque se reenvía a google.com.br, por lo que es posible que no lo consigas), y si vas a "googlecom" obtendrás un 0 (no se encuentra el host), por lo que con el último, no hay nadie para devolver un código.

Probado usando el código a continuación.

<?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);

66
2018-04-19 12:50



Intenta esto después de curl_exec para ver cuál es el problema:

print curl_error($ch);

Si se imprime algo así como 'malformado', entonces verifique su formato de URL.


56
2018-04-19 12:28



¿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.


1
2018-04-19 12:22



Como dije aquí y debajo, una solicitud fallida (es decir, el servidor no se encuentra) devuelve falso, no hay código de estado HTTP, ya que nunca se ha recibido una respuesta.

Llamada curl_error().


1
2018-04-19 12:25



comprobar el curl_error después de curl_getinfo para descubrir los errores ocultos.

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

1
2017-11-20 14:22



Tuve el mismo problema y en mi caso esto fue porque la función curl_exec está deshabilitada en php.ini. Verifique los registros:

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

La solución es eliminar curl_exec de las funciones deshabilitadas en php.ini en el archivo de configuración del servidor.


1
2018-04-19 10:52