Спампоўка праз проксі з 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 на сайце або проксі.
Кантэкстны менеджар адказу закрывае адказ, нават калі запіс не ўдаўся або праграма спынілася раней. Ілюстрацыйная пара тайм-аўтаў не з'яўляецца рэальным крайнім тэрмінам для ўсёй перадачы; задайце палітыку часу жыцця спампоўкі асобна па меры неабходнасці.
Пасля паспяховага спажывання праверце артэфакт, якога чакае праграма, перш чым публікаваць яго канчатковую назву. Пры перапынку захоўвайце частковы файл толькі паводле свядомай палітыкі аднаўлення, з метаданымі, якія ідэнтыфікуюць аддаленае прадстаўленне. Непусты часовы файл не з'яўляецца паспяховай спампоўкай.