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 ашқышы HTTPS мақсаты үшін сертификатты әдеттегідей тексеретін HTTP проксиді пайдаланады. Ол жаһандық ашқыш орнатпайды; қажет болса, аутентификация оның қолдау көрсетілген баптауын талап етеді.

copyfileobj бөліктермен көшіреді. Файл контекстінен шығу оны жабады және os.replace қорытынды атауды орнатпас бұрын буферленген жазбаларды тазалайды.

Егер сұрау немесе көшіру қате көтерсе, қайта атау өткізіліп жіберіледі. Тазалау саясаты үшін ішінара файл қалуы мүмкін, және бұл ағын сол сәтсіздікте бар қорытынды файлды тимей қалдырады. Сәтті болса, алмастыру сол қорытынды файлдың үстінен жаза алады, сондықтан саясатты әдейі таңдаңыз.

Қатар жұмыстар үшін бірегей уақытша атауларды пайдаланыңыз. Бөлек ашқыш нысандары бірдей .part жолын бөлісетін жұмыстарды қорғамайды.

20 секундтық параметр жалпы жүктеу уақытын емес, қолдау көрсетілетін сокет операцияларын шектейді. Бүкіл жұмыс мерзімі қолданбада бөлек өңдеуді қажет етеді. Тасымалдаудың аяқталуы да жүктелген файлды тексеруден бөлек.

Қатысты мақалалар