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 ਸਕਿੰਟ ਦੀ ਸੈਟਿੰਗ ਕੁੱਲ ਡਾਊਨਲੋਡ ਸਮੇਂ ਦੀ ਬਜਾਏ ਸਮਰਥਿਤ ਸਾਕੇਟ ਕਾਰਵਾਈਆਂ ਨੂੰ ਸੀਮਿਤ ਕਰਦੀ ਹੈ। ਪੂਰੇ ਕੰਮ ਦੀ ਸਮਾਂ-ਸੀਮਾ ਲਈ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਵੱਖਰੀ ਸੰਭਾਲ ਚਾਹੀਦੀ ਹੈ। ਤਬਾਦਲਾ ਪੂਰਾ ਹੋਣਾ ਵੀ ਡਾਊਨਲੋਡ ਕੀਤੀ ਫ਼ਾਈਲ ਦੀ ਜਾਂਚ ਤੋਂ ਵੱਖਰਾ ਹੈ।