Dav*_*veG 6 php file-get-contents
我正在尝试使用PHP下载网页的内容.当我发出命令时:
$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2");
Run Code Online (Sandbox Code Playgroud)
它返回一个报告服务器已关闭的页面.然而,当我将相同的URL粘贴到我的浏览器中时,我得到了预期的页面.
有谁知道是什么导致了这个?file_get_contents是否会传输任何区别于浏览器请求的标头?
Pas*_*TIN 16
是的,存在差异 - 浏览器倾向于发送大量额外的HTTP标头,我会说; 并且两者发送的可能没有相同的值.
在这里,做了几个测试后,似乎传递称为HTTP标头Accept是必要的.
这可以使用第三个参数来完成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;
Run Code Online (Sandbox Code Playgroud)
有了这个,我就可以获得页面的HTML代码.
备注:
User-Agent,但似乎没有必要- 这就是为什么相应的行在这里作为注释Accept标题的值是我在尝试使用Firefox时请求该页面时使用的Firefox file_get_contents.
有关更多信息,您可以查看:
file_get_contentsstream_context_create