2011-05-22 18 views
5

Necesito un script PHP que lea el código de respuesta HTTP para cada solicitud de URL.PHP get_headers() alternative

algo así como

$headers = get_headers($theURL); 
return substr($headers[0], 9, 3); 

El problema es que los get_headers() se deshabilita a nivel de servidor, como policy.So no funciona.

La pregunta es ¿cómo obtener el código de respuesta HTTP para una URL?

Respuesta

10

Si la curvatura está activada, puede utilizarla para conseguir toda la cabecera o simplemente el código de respuesta. El código siguiente se asigna el código de respuesta a la variable $response_code:

$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_URL => 'http://stackoverflow.com')); 
curl_exec($curl); 
$response_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
curl_close($curl); 

Para obtener toda la cabecera se puede emitir una petición HEAD, así:

$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_HEADER => true, 
    CURLOPT_NOBODY => true, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_URL => 'http://stackoverflow.com')); 
$headers = explode("\n", curl_exec($curl)); 
curl_close($curl); 
+0

¡Gracias a todos! ¡Habilitar CURL hizo esa magia! –

+0

@Matej Sí, funciona bien, pero una simple nota al respecto, creo que no obtendremos el "servidor" de lo que están usando, como "Apache o iis, etc.", y algunos otros detalles. pero para verificar el código de respuesta del servidor, funciona bien. – VKGS

+0

@Sekar: El 'Servidor' es opcional, depende del servidor si lo envía o no. –

4

Uso HttpRequest si puedes: http://de2.php.net/manual/en/class.httprequest.php

$request = new HttpRequest("http://www.example.com/"); 
$request->send(); 
echo $request->getResponseCode(); 

o hacerlo de la manera difícil: http://de2.php.net/manual/en/function.fsockopen.php

$errno = 0; 
$errstr = ""; 

$res = fsockopen('www.example.com', 80, $errno, $errstr); 

$request = "GET/HTTP/1.1\r\n"; 
$request .= "Host: www.example.com\r\n"; 
$request .= "Connection: Close\r\n\r\n"; 

fwrite($res, $request); 

$head = ""; 

while(!feof($res)) { 
    $head .= fgets($res); 
} 

$firstLine = reset(explode("\n", $head)); 
$matches = array(); 
preg_match("/[0-9]{3}/", $firstLine, $matches); 
var_dump($matches[0]); 

Curl puede ser también una buena opción, pero la mejor opción es golpear a su administrador;)