PHP文件_get_contents()的行为与浏览器不同
我正在尝试使用PHP下载网页的内容。 当我发出命令时: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粘贴到浏览器中时,我得到了预期的页面 有人知道这是什么原因吗?文件内容传输的头是否与浏览器请求不同?是的,有区别——我认为,浏览器往往会发送大量附加信息;而两者发送的数据可能不具有相同的值 在这里,在做了两个测试之后
$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代码
注:
- 我首先测试了通过
,但似乎没有必要——这就是为什么相应的行在这里作为注释用户代理
- 用于
标题的值是Firefox在尝试Accept
之前使用Firefox请求该页面时使用的值。file\u get\u contents
- 其他一些值可能还可以,但我没有做任何测试来确定哪个值是必需的
有关更多信息,您可以查看:
- ——这是有趣的一页,这里;-)李>