Python urllib सह प्रॉक्सी डाउनलोड फाइलमध्ये स्ट्रीम करा
प्रॉक्सी डाउनलोड तात्पुरत्या फाइलमध्ये स्ट्रीम करा आणि प्रत पूर्ण झाल्यानंतरच अंतिम फाइलनाव प्रकाशित करा.
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 सेकंदाची सेटिंग एकूण डाउनलोड वेळेऐवजी समर्थित सॉकेट क्रिया मर्यादित करते. संपूर्ण कामाच्या मुदतीसाठी अनुप्रयोगात वेगळे हाताळणी आवश्यक आहे. हस्तांतरण पूर्ण होणे देखील डाउनलोड केलेल्या फाइलच्या पडताळणीपासून वेगळे आहे.