1

我正在寻找重新编写我拥有的 Python 脚本,该脚本通过链接列表,然后从它获得的页面中提取几天。

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

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

  • 连接到站点后,我会检查内容类型标题。Python 似乎能够在不下载整个文件的情况下做到这一点。

  • 将我在请求中下载的 URL 限制为 150kb。由于我只是在 HTML 页面之后,这将涵盖它。

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

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

4

1 回答 1

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");
    }
}
于 2017-05-24T11:07:13.270 回答