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 سېكۇنت تەڭشىكى ئومۇمىي چۈشۈرۈش ۋاقتىنى ئەمەس، قوللايدىغان سوكېت مەشغۇلاتلىرىنى چەكلەيدۇ. پۈتۈن خىزمەتنىڭ مۇددىتى ئەپلىكەتتە ئايرىم بىر تەرەپ قىلىشنى تەلەپ قىلىدۇ. يۆتكەشنىڭ تاماملىنىشىمۇ چۈشۈرۈلگەن ھۆججەتنى دەلىللەشتىن ئايرىم.

مۇناسىۋەتلىك ماقالىلەر