2010-03-30 13 views
5

Estoy tratando de descargar los contenidos de una página web usando PHP. Cuando ejecute el comando:PHP file_get_contents() se comporta de manera diferente al navegador

$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2"); 

Devuelve una página que informa de que el servidor está caído. Sin embargo, cuando pego la misma URL en mi navegador, obtengo la página esperada.

¿Alguien tiene alguna idea de lo que está causando esto? ¿File_get_contents transmite los encabezados que lo diferencian de una solicitud del navegador?

Respuesta

16

Sí, hay diferencias: el navegador tiende a enviar muchas cosas adicionales HTTP headers, yo diría; y los que son enviados por ambos probablemente no tengan el mismo valor.

Aquí, después de hacer un par de pruebas, parece que es necesario pasar el encabezado HTTP llamado Accept.

Esto se puede hacer usando el tercer parámetro de file_get_contents, para especificar la información de contexto additionnal:

$opts = array('http' => 
    array(
     'method' => 'GET', 
     //'user_agent ' => "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2) Gecko/20100301 Ubuntu/9.10 (karmic) Firefox/3.6", 
     'header' => array(
      'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*\/*;q=0.8 
' 
     ), 
    ) 
); 
$context = stream_context_create($opts); 

$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2", false, $context); 
echo $f; 

Con esto, yo soy capaz de obtener el código HTML de la página.


Notas:

  • primera vez comprobados que pasan a la User-Agent, pero no parece ser necesario - por lo que la línea correspondiente está aquí como un comentario
  • El valor se utiliza para el encabezado Accept es el que usa Firefox cuando solicité esa página con Firefox antes de intentar con file_get_contents.
    • Algunos otros valores pueden estar bien, pero no hice ninguna prueba para determinar qué valor es el requerido.


Para más información, se puede echar un vistazo a:

-3

reemplazar todos los espacios con un 20%

Cuestiones relacionadas