Завантаження через проксі з Requests та iter_content
Споживайте відповідь Requests поступово, зберігаючи звичайні перевірки статусу, очищення та свідому політику для часткового виводу.
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 на сайті чи проксі.
Контекстний менеджер відповіді закриває відповідь, навіть якщо запис не вдався або застосунок зупинився раніше. Показана пара тайм-аутів не є реальним крайнім терміном для всієї передачі; задайте політику часу життя завантаження окремо за потреби.
Після успішного споживання перевірте артефакт, який очікує застосунок, перш ніж публікувати його остаточну назву. У разі переривання зберігайте частковий файл лише за свідомою політикою поновлення, з метаданими, що ідентифікують віддалене подання. Непорожній тимчасовий файл не є успішним завантаженням.