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 လုပ်ငန်းများကို ကန့်သတ်သည်။ အလုပ်တစ်ခုလုံး၏ သတ်မှတ်ချိန်အတွက် အပလီကေးရှင်းတွင် သီးခြား ကိုင်တွယ်မှု လိုအပ်သည်။ လွှဲပြောင်းမှု ပြီးဆုံးခြင်းသည်လည်း ဒေါင်းလုဒ်လုပ်ထားသော ဖိုင်ကို စစ်ဆေးခြင်းနှင့် သီးခြားဖြစ်သည်။

ဆက်စပ်ဆောင်းပါးများ