cURL获取数据的大小限制

5

我想知道是否有办法通过cURL获取特定数量的数据?

选项1:
curl_setopt ($curl_handle, CURLOPT_HTTPHEADER, array("Range: bytes=0-1000"));但并非所有服务器都支持。

选项2:
Having trouble limiting download size of PHP's cURL function,但这个函数给我返回错误 Failed writing body (0 != 11350)。据我所知,很多人说这是一个bug。

因此,我尝试使用上面的write_function,将curl_close($handle)替换为returning 0,但这会引发一个错误Attempt to close cURL handle from a callback

现在我唯一能想到的方法是解析内容长度的标头但这最终会导致2个请求??第一个请求是使用CURLOPT_NOBODY获取标头,然后获取完整内容?


你的目的是仅从文件中获取前1000个字节,还是你只需要前1000个字节来进行处理? - Andy Baird
我正在构建一个CSS优化器,它将爬取网站,并解析<link>标签以获取CSS和<a>标签以爬取同一域中的其他链接,以获取可能的其他“unique” CSS文件并将它们连接起来并压缩。由于CSS文件和原始HTML文件通常不超过500kb,因此我想对其进行限制,以防黑客通过使我的站点解析大量锚标记而给我的服务器额外负载。 - Shishant
你可以使用 fsockopen 和相关函数来实现,但这种优化并不值得。记住,“过早的优化是万恶之源”。 - sanmai
我曾经看到过像“Failed writing body (0 != 11350)”这样的东西,当时磁盘已满。 - Darth Egregious
3个回答

0
选项2:在限制PHP的cURL函数下载大小方面遇到了麻烦,但是这个函数给我报错“写入失败(0!= 11350)”和读取错误,我发现很多人说这是一个bug。
不清楚你具体在做什么。如果返回0,则cURL会发出错误信号,但您将已经读取了所需的所有数据。只需忽略该错误即可。
另一个选项是使用带有http://包装器的fopen,这是您没有提到是否尝试过的选项。例如:
$h = fopen('http://example.com/file.php', 'r');
$first1000Bytes = fread($h, 1000);
fclose($h);

我知道fopen,但许多测试表明cURL通常比'fopen'快2-4倍,所以我想知道这里是否有其他可能性。另外,即使它抛出了错误,它也会获取所有数据(我认为这也可能是由于速度快导致缓冲区大小等于整个数据,我将尝试使用过长的数据进行测试)。 - Shishant

0

使用fopen和fgets逐行读取,直到你认为已经读取了足够的行数,或者使用fgetc逐个字符读取,这是可能的吗? fgets

不确定这是否完全符合你的要求,但应该可以限制从远程源获取的数据量。


-5

这似乎可以解决你的问题:

mb_strlen($string, '8bit');

这个回答与问题无关,也许该回答是针对其他问题而意外发布到了这里。 - Izhar Aazmi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接