PHP文件_get_contents()的行为与浏览器不同

PHP文件_get_contents()的行为与浏览器不同,php,file-get-contents,Php,File Get Contents,我正在尝试使用PHP下载网页的内容。 当我发出命令时: $f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2"); 它返回一个报告服务器已关闭的页面。然而,当我将相同的URL粘贴到浏览器中时,我得到了预期的页面 有人知道这是什么原因吗?文件内容传输的头是否与浏览器请求不同?是的,有区别——我认为,浏览器往往会发送大量附加信息;而两者发送的数据可能不具有相同的值 在这里,在做了两个测试之后

我正在尝试使用PHP下载网页的内容。 当我发出命令时:

$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2");
它返回一个报告服务器已关闭的页面。然而,当我将相同的URL粘贴到浏览器中时,我得到了预期的页面


有人知道这是什么原因吗?文件内容传输的头是否与浏览器请求不同?

是的,有区别——我认为,浏览器往往会发送大量附加信息;而两者发送的数据可能不具有相同的值

在这里,在做了两个测试之后,似乎有必要传递名为
Accept
的HTTP头

这可以使用
file\u get\u 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代码


注:

  • 我首先测试了通过
    用户代理
    ,但似乎没有必要——这就是为什么相应的行在这里作为注释
  • 用于
    Accept
    标题的值是Firefox在尝试
    file\u get\u contents
    之前使用Firefox请求该页面时使用的值。
    • 其他一些值可能还可以,但我没有做任何测试来确定哪个值是必需的

有关更多信息,您可以查看:

  • ——这是有趣的一页,这里;-)
将所有空格替换为%20