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 кодиране на предаване на части на сайта или проксито.

Контекстният мениджър на отговора затваря отговора дори ако записът се провали или приложението спре рано. Илюстративната двойка таймаути не е краен срок по часовник за цялото предаване; задайте политиката за времетраене на изтеглянето отделно, ако е необходимо.

След успешно консумиране проверете артефакта, който приложението очаква, преди да публикувате окончателното му име. При прекъсване запазвайте частичния файл само при съзнателна политика за възобновяване, с метаданни, идентифициращи отдалеченото представяне. Непразен временен файл не е успешно изтегляне.

Подобни статии