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)

Vervang die URL's en lêername vir die toepassing. Vir 'n toegelate aflaai van 'n openbare lêer sonder proxy-outentisering kan die HTTP-proxylys kandidaat-eindpunte vir die proxy-URL lewer. Hierdie toegewyde urllib-opener gebruik 'n HTTP-proxy vir 'n HTTPS-bestemming met normale sertifikaatverifikasie. Dit installeer nie 'n globale opener nie; outentisering, indien nodig, vereis sy ondersteunde opstelling.

copyfileobj kopieer in stukke. Om die lêerkonteks te verlaat, sluit dit die lêer en spoel gebufferde skrywes voordat os.replace die finale naam installeer.

As die aanvra of die kopiëring 'n fout gooi, word die hernoeming oorgeslaan. 'n Gedeeltelike lêer kan vir die opruimingsbeleid oorbly, en hierdie vloei laat 'n bestaande finale lêer ongeraak by daardie mislukking. By sukses kan die vervanging daardie finale lêer oorskryf, so kies die beleid doelbewus.

Gebruik unieke tydelike name vir gelyktydige take. Afsonderlike opener-objekte beskerm nie take wat dieselfde .part-pad deel nie.

Die 20-sekonde-instelling beperk ondersteunde socket-bewerkings eerder as die totale aflaai-tyd. 'n Sperdatum vir die hele taak vereis aparte toepassingshantering. Voltooiing van die oordrag is ook apart van die verifiëring van die afgelaaide artefak.

Verwante artikels