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 ოპერაციებს და არა ჩამოტვირთვის მთლიან დროს. მთელი სამუშაოს ვადა მოითხოვს ცალკე დამუშავებას აპლიკაციაში. გადაცემის დასრულება ასევე განცალკევებულია ჩამოტვირთული ფაილის შემოწმებისგან.

დაკავშირებული სტატიები