使用Guzzle / Goutte时限制请求大小

时间:2014-10-22 12:06:05

标签: php curl guzzle goutte

我希望重新编写一个Python脚本,它通过一个链接列表,然后从它获取的页面中提取几天。

出现的一个问题是,如果链接是图像或zip或甚至是ISO,我不想下载整个文件。我可以尝试检查扩展名,但这并不总是有效。

在我的Python脚本中,我做了两件事。

  • 连接到网站后,我会检查内容类型标题。 Python似乎无需下载整个文件即可完成此操作。

  • 将我在请求中下载的网址数限制为150kb。由于我只是在HTML页面之后,所以它更多地涵盖了它。

我想在这个项目中使用Guzzle,但查看文档我不确定是否可以这样做。

我的主要问题是确保我没有下载ISO文件或视频并使用所有RAM或带宽。

1 个答案:

答案 0 :(得分:2)

来自guzzle 6文档。 stream:设置为true以流式传输响应,而不是将其全部预先下载。

您可以使用此功能仅下载前150 KB。

$client = new Client();
$response = $client->get($url, [
    'stream' => true,
]);
$body = $response->getBody();

$bytesRead = 0;
$dataRead = "";
while (!$body->eof()) {
    $data = $body->read(1024);
    $dataRead .= $data;
    $bytesRead += strlen($data);
    if($bytesRead >= 150*1024) {
        $body->close();
        throw new \Exception("exceeded download limit");
    }
}