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

前端之家收集整理的这篇文章主要介绍了PHP file_get_contents()的行为与浏览器不同前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 PHP下载网页的内容. @H_404_1@当我发出命令时:
$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代码.

备注:

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

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

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

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

猜你在找的PHP相关文章