2010-03-30 28 views
5

我试图使用PHP下载网页的内容。 当我发出命令:PHP file_get_contents()对浏览器的行为有所不同

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

它返回一个报告,该服务器已关闭的页面。然而,当我将相同的URL粘贴到我的浏览器中时,我会看到预期的页面。

有没有人有任何想法是什么造成这个? file_get_contents是否传输任何将其与浏览器请求区分开来的头文件?

回答

16

是的,有差异 - 浏览器往往会发送大量额外的HTTP headers,我会说;并且由两者发送的那些可能不具有相同的值。

这里,在做了一些测试之后,似乎需要传递名为Accept的HTTP标头

这可以使用的file_get_contents第三个参数,指定其它附加的上下文信息来完成:

$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; 

有了这个,我能够得到网页的HTML代码。


注:

  • 我第一次测试合格User-Agent,但它似乎没有必要- 这就是为什么相应的线路是这里作为一个评论
  • 值用于Accept标题是我在使用Firefox请求该页面之前使用的一个Firefox,然后尝试使用file_get_contents
    • 其他一些值可能是好的,但我没有做任何测试来确定哪个值是必需的。


欲了解更多信息,你可以看看:

-3

用%替换所有的空格20

相关问题