with session.get(url, stream=True, proxies=routes,
                 timeout=(5, 30)) as response:
    response.raise_for_status()
    with open(part_path, 'wb') as output:
        for chunk in response.iter_content(chunk_size=64 * 1024):
            if chunk:
                output.write(chunk)

Використовуйте цей шаблон із наявною сесією Requests застосунку, маршрутами проксі, URL і тимчасовим шляхом виводу. Для публічного маршруту HTTP список HTTP-проксі надає адреси-кандидати для вашого зіставлення проксі. Шаблон потокової передачі споживає тіло поступово замість отримання response.content і подальшого запису другого об'єкта повного розміру.

Зберігайте цю властивість протягом усього завантаження: stream=True відкладає тіло, але подальше звернення до response.content усе ще може зібрати його цілком у пам'яті. Розмір фрагмента в iter_content — це налаштування читання, а не запит на чанкове кодування передавання HTTP на сайті чи проксі.

Контекстний менеджер відповіді закриває відповідь, навіть якщо запис не вдався або застосунок зупинився раніше. Показана пара тайм-аутів не є реальним крайнім терміном для всієї передачі; задайте політику часу життя завантаження окремо за потреби.

Після успішного споживання перевірте артефакт, який очікує застосунок, перш ніж публікувати його остаточну назву. У разі переривання зберігайте частковий файл лише за свідомою політикою поновлення, з метаданими, що ідентифікують віддалене подання. Непорожній тимчасовий файл не є успішним завантаженням.

Схожі статті