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 सेकेन्डको सेटिङले कुल डाउनलोड समय नभई समर्थित सकेट सञ्चालनहरू सीमित गर्छ। पूरै कामको समयसीमाका लागि अनुप्रयोगमा छुट्टै ह्यान्डलिङ चाहिन्छ। स्थानान्तरण पूरा हुनु पनि डाउनलोड गरिएको फाइलको प्रमाणीकरणबाट छुट्टै हो।

सम्बन्धित लेखहरू