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)

Ersetzt d'URLen an d'Dateinimm duerch déi vun der Applikatioun. Fir en erlaabten Download vun enger ëffentlecher Datei ouni Proxy-Authentifizéierung kann d'HTTP-Proxy-Lëscht Kandidaten-Endpunkte fir d'Proxy-URL liwweren. Dësen dedizéierten urllib-Opener benotzt en HTTP-Proxy fir en HTTPS-Zil mat normaler Zertifikatspréifung. Hien installéiert keen globale Opener; d'Authentifizéierung erfuerdert, wann néideg, seng ënnerstëtzte Konfiguratioun.

copyfileobj kopéiert a Brocken. Beim Verloosse vum Dateikontext gëtt d'Datei zougemaach a gepufferte Schreiwen ginn eidel, ier os.replace den endgültegen Numm setzt.

Wann d'Ufro oder d'Kopie eng Ausnam ausléist, gëtt d'Ëmbenennung iwwersprongen. Eng deelweis Datei kann no der Botzrichtlinn iwwreg bleiwen, an dëse Floss léisst eng existéierend endgülteg Datei bei deem Feeler onberéiert. Bei Erfolleg kann d'Ersetzen déi endgülteg Datei iwwerschreiwen, also wielt d'Richtlinn bewosst.

Benotzt eenzegaarteg temporär Nimm fir gläichzäiteg Aufgaben. Getrennt Opener-Objete schützen keng Aufgaben, déi deen selwechten .part-Wee deelen.

D'Astellung vun 20 Sekonnen begrenzt ënnerstëtzte Socket-Operatiounen, net déi total Downloadzäit. Fir eng Frist fir déi ganz Aufgab ass eng separat Behandlung an der Applikatioun noutwenneg. D'Ofschlosse vum Transfer ass och getrennt vun der Préifung vun der erofgeluedener Datei.

Ähnlech Artikelen