加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:29:10 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用 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粘贴到我的浏览器中时,我得到了预期的页面.

有谁知道是什么导致了这个? 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 – 这是有趣的页面,在这里;-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读