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 සැකසුම මුළු බාගැනීමේ කාලය නොව ආධාරක සොකට් මෙහෙයුම් සීමා කරයි. මුළු කාර්යයේ කාලසීමාව සඳහා යෙදුම තුළ වෙන් වූ හැසිරවීමක් අවශ්‍ය වේ. මාරු කිරීම සම්පූර්ණ වීම ද බාගත කළ ගොනුව සත්‍යාපනය කිරීමෙන් වෙන් වේ.

අදාළ ලිපි