import os
import shutil
from urllib.request import ProxyHandler, build_opener

proxy = 'http://proxy.example.net:8080'
opener = build_opener(ProxyHandler({
    'http': proxy,
    'https': proxy,
}))

temporary = 'archive.zip.part'
destination = 'archive.zip'

with opener.open('https://downloads.example.net/archive.zip',
                 timeout=20) as response:
    with open(temporary, 'wb') as output:
        shutil.copyfileobj(response, output)

os.replace(temporary, destination)

Замяніце URL-адрасы і імёны файлаў для праграмы. Для дазволенай спампоўкі публічнага файла без аўтэнтыфікацыі проксі спіс HTTP-проксі можа даць кандыдатаў у канчатковыя пункты для URL проксі. Гэты спецыяльны адкрывальнік urllib выкарыстоўвае HTTP-проксі для HTTPS-прызначэння са звычайнай праверкай сертыфіката. Ён не ўсталёўвае глабальны адкрывальнік; аўтэнтыфікацыя, калі яна патрэбна, патрабуе яго падтрыманай наладкі.

copyfileobj капіруе часткамі. Выхад з кантэксту файла зачыняе яго і скідвае буфераваныя запісы да таго, як os.replace усталюе канчатковае імя.

Калі запыт або капіраванне выклікае памылку, перайменаванне прапускаецца. Частковы файл можа застацца для палітыкі ачысткі, і гэты працэс пакідае існы канчатковы файл некранутым пры такой няўдачы. Пры поспеху замена можа перазапісаць гэты канчатковы файл, таму выбірайце палітыку свядома.

Выкарыстоўвайце ўнікальныя часовыя імёны для паралельных задач. Асобныя аб'екты-адкрывальнікі не абараняюць задачы, што дзеляць адзін шлях .part.

Налада ў 20 секунд абмяжоўвае падтрымліваныя аперацыі сокета, а не агульны час спампоўкі. Для ўсёй задачы патрэбны асобны дэдлайн у праграме. Завяршэнне перадачы таксама аддзелена ад праверкі спампаванага файла.

Падобныя артыкулы