我正在尝试使用 PHP 下载网页的内容。当我发出命令时:
$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2");
它返回一个页面,报告服务器已关闭。然而,当我将相同的 URL 粘贴到浏览器中时,我得到了预期的页面。
有谁知道是什么原因造成的?file_get_contents 是否传输任何将其与浏览器请求区分开来的标头?
我正在尝试使用 PHP 下载网页的内容。当我发出命令时:
$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2");
它返回一个页面,报告服务器已关闭。然而,当我将相同的 URL 粘贴到浏览器中时,我得到了预期的页面。
有谁知道是什么原因造成的?file_get_contents 是否传输任何将其与浏览器请求区分开来的标头?
是的,存在差异——浏览器倾向于发送大量附加的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;
有了这个,我可以得到页面的 HTML 代码。
备注:
User-Agent
,但似乎没有必要——这就是为什么相应的行在这里作为注释Accept
标头的值是我在尝试使用 Firefox 请求该页面时使用的 Firefox file_get_contents
。
有关更多信息,您可以查看:
file_get_contents
stream_context_create
用 %20 替换所有空格