PHP file_get_contents()的行为与浏览器不同

我正在尝试使用 PHP下载网页的内容.
当我发出命令时:
$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.PHP?searchMode=2");

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

有谁知道是什么导致了这个? file_get_contents是否会传输任何区别于浏览器请求的标头?

是的,存在差异 – 浏览器倾向于发送大量的额外的 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代码.

备注:

>我首先测试了传递用户代理,但似乎没有必要 – 这就是为什么相应的行在这里作为注释
>该值用于Accept标头,是我在尝试使用file_get_contents之前使用Firefox请求该页面时使用的Firefox.

>其他一些值可能没问题,但我没有做任何测试来确定哪个值是必需的值.

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

> file_get_contents
> stream_context_create
> Context options and parameters
> HTTP context options – 这是有趣的页面,在这里;-)

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...