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 સેકન્ડનું સેટિંગ કુલ ડાઉનલોડ સમયને નહીં, પણ સમર્થિત સોકેટ ક્રિયાઓને મર્યાદિત કરે છે. આખા કાર્ય માટેની સમયમર્યાદા માટે એપ્લિકેશનમાં અલગ હેન્ડલિંગ જોઈએ. સ્થાનાંતરણ પૂર્ણ થવું પણ ડાઉનલોડ કરેલી ફાઇલની ચકાસણીથી અલગ છે.

સંબંધિત લેખો