试图用curl和输出读取部分HTML文件很奇怪

时间:2013-02-12 20:08:16

标签: php curl

set_time_limit(0);
$ch = curl_init('http://www.tibia.com/community/?subtopic=highscores&world=Antica');
curl_setopt($ch, CURLOPT_RANGE, '0-999');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
echo $data = curl_exec($ch);//get curl response
curl_close($ch);

示例输出是(每次点击刷新按钮时略有不同):
    <í]kSã8ºþNÕüOÍÕr™&amp;™,³ÜÒ3{æ¥8J¢Æ±2¾é=ûßÏ«<Û±BãYÜåž,[¥÷òHz%[ÎØ>XÖÆàÐG=

当我注释掉CURLOPT_RANGE

时,页面显示正确 编辑:我补充道     curl_setopt($ ch,CURLOPT_ENCODING,“gzip”); 输出似乎没问题,但仅当范围从0开始时。如果范围是例如2000-3000,则它完全没有输出。

编辑2:错误消息是:“处理内容未解码时出错:无效距离太远”

2 个答案:

答案 0 :(得分:3)

你正在获取gzip压缩内容。您应该明确声明要返回纯HTML。您可以添加以下选项:

curl_setopt($ch, CURLOPT_ENCODING, 'deflate');

答案 1 :(得分:2)

我从未使用过CURLOPT_RANGE。你需要使用它吗?

gzip仅在从0开始时起作用的原因是那里有信息需要解压缩内容。如果你必须使用Range,那么你应该捕获每个范围的数据并将其合并然后解压缩。

编辑:

您在一些评论中提到使用Range来获取一些数据以节省带宽。我使用Firebug检查了页面,它是&lt; 10KB。所有的图像几乎是500k。你已经节省了很多,除非你使用拨号上网10kb,它什么都没有。不要担心使用Range和组合块,只需让cURL处理gzip。