Ограничить размер запроса при использовании Guzzle / Goutte

Я ищу переписать скрипт Python, который у меня есть, который просматривает список ссылок и затем извлекает несколько дней из страниц, которые он получает.

Одна проблема, которая возникает, если ссылка представляет собой изображение, почтовый индекс или даже ISO, я не хочу загружать весь этот файл. Я могу попробовать проверить расширение, но это не всегда работает.

В моем скрипте Python я делаю две вещи.

  • Как только я подключаюсь к сайту, я проверяю заголовок типа контента. Кажется, что Python может сделать это без загрузки всего файла.

  • Ограничьте объем URL, который я загружаю в своем запросе, до 150 КБ. Так как я только за HTML-страницами, это более чем покрывает это.

Я хочу использовать Guzzle для этого проекта, но, просматривая документы, я не уверен, что это можно сделать.

Моя главная проблема заключается в том, чтобы я не загружал ISO-файлы или видео и не использовал всю оперативную память или пропускную способность.

0

Решение

Из жрет 6 документацию. stream: установите значение true для потоковой передачи ответа, а не для загрузки всего этого заранее.

Вы можете использовать эту функцию, чтобы загрузить только первые 150 КБ.

$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");
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]