PHP file_get_contents / CURL 不返回整页
Posted
技术标签:
【中文标题】PHP file_get_contents / CURL 不返回整页【英文标题】:PHP file_get_contents / CURL not returning full page 【发布时间】:2012-12-16 21:33:56 【问题描述】:我在尝试使用 CURL 或 file_get_contents 提取第 3 方文件内容时遇到一些奇怪的行为,已读取页面的 pasrt,但它停在随机位置...虽然没有错误(超时等)。
如果我给出完整的例子,可能最容易看到!:
使用以下非常简单的脚本来读取完整的 URL 并返回内容可以正常工作,在一两秒内获得页面的完整内容(少一些外部 css 等):
<?php
set_time_limit(180);
$page = file_get_contents('http://www.fantasyleague.com/Classic/Stats/playerlist.aspx?dpt=3');
echo $page;
?>
但是,如果我们改为
<?php
set_time_limit(180);
$page = file_get_contents('http://www.fantasyleague.com/Classic/Stats/playerlist.aspx?dpt=4');
echo $page;
?>
它需要很长时间才能运行,并最终返回页面的一部分,但不是全部。它并不一致,但它通常以“A Westwood AV 3.6 12”或“show”结尾,在页面稍远一点的地方。
如果您查看这两个 URL,您会发现它们基本相同。而且这种行为刚刚开始发生,直到一两天前,都运行良好。
有什么想法吗?我可以提供任何我错过的更多信息!
编辑:
文件完成位置的示例...原始文件包含:
<div class="right">
<a id="Playerlist_help_button" class="button left" href="#"><div>Show help</div></a>
<a id="Playerlist_filters_button" class="button left" href="#"><div>Show filters</div></a>
<a class="button left" href="PlayerListPrintable.aspx" target="_blank"><div>Printable Version</div></a>
<br class="clear" />
</div>
但检索到的数据停在:
<div class="right">
<a id="Playerlist_help_button" class="button left" href="#"><div>Show help</div></a>
<a id="Playerlist_filters_button" class="button left" href="#"><div>Show
或者它经常失败的另一个地方是:
<td><div class="chilli normal" /></td>
<td>12</td>
<td>0</td>
变成:
<td><div class="chilli normal" /></td>
<td>12</td>
【问题讨论】:
页面上是否有可能存在 javascript 并且部分内容正在通过 AJAX 检索? Strage,maxlen 默认是读取到文件末尾。 我尝试使用 Ruby(超时)和 Python(在“12”之后结束)加载页面,所以我猜这与服务器有关 【参考方案1】:通过 file_get_contents 或 curl 一次只能获取 html 源代码,但不能获取所有组件
【讨论】:
“不是所有组件”是什么意思? Web 代理可以毫无问题地处理这些请求。唯一的区别是浏览器中的 JavaScript 可以更改内容。您不知道 user1943049 想对内容做什么。所以你不知道这些是否可以应用。 我认为这与 javascript 等没有任何关系,看看它停止的位置......不知道如何将代码示例添加到评论中,但会更新我原来的问题... 确实如此,但是 PHP 的 bug 已经够多了。这很有可能是一个错误。前段时间我也有一个非常阶段性的问题。当我在一行代码之后添加注释时,代码就可以工作了。当我删除评论时,它不再起作用。您可以尝试更新您的 PHP 版本,如果这不起作用,您可以在此处应用错误:bugs.php.net。或者你可以等几天,也许这里有人有解决办法。 @Laurence 一个大机会? file_get_contents 每天在全球数千个应用程序中使用。如果从一个简单的 URL 获取数据确实存在错误,那么现在就知道了。更大的可能性是 OP 做错了什么,比如没有发送正确的标头或类似的东西。 @Laurence 不完全一样。当然,它是 GET 请求,但针对两个不同的 URL,因此结果可能会有所不同。以上是关于PHP file_get_contents / CURL 不返回整页的主要内容,如果未能解决你的问题,请参考以下文章
file_get_contents长时间超时,有没有办法超过几秒就重新执行
base64_encode(file_get_contents(zipPath))c#等效
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题