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 վայրկյանի կարգավորումը սահմանափակում է աջակցվող socket գործողությունները, ոչ թե ներբեռնման ընդհանուր ժամանակը։ Ամբողջ աշխատանքի ժամկետի համար անհրաժեշտ է առանձին մշակում հավելվածում։ Փոխանցման ավարտը նույնպես առանձին է ներբեռնված ֆայլի ստուգումից։

Առնչվող հոդվածներ