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)

Erstatt URL-ene og filnavnene med applikasjonens egne. For en tillatt nedlasting av en offentlig fil uten proxy-autentisering kan HTTP-proxylisten levere kandidat-endepunkter for proxy-URL-en. Denne dedikerte urllib-åpneren bruker en HTTP-proxy til en HTTPS-destinasjon med vanlig sertifikatverifisering. Den installerer ikke en global åpner; autentisering krever, om nødvendig, dens støttede oppsett.

copyfileobj kopierer i biter. Når filkonteksten forlates, lukkes filen, og bufrede skrivinger skyves ut før os.replace installerer det endelige navnet.

Hvis forespørselen eller kopieringen kaster en feil, hoppes omdøpingen over. En delvis fil kan bli liggende for oppryddingspolicyen, og denne flyten lar en eksisterende endelig fil være urørt ved den feilen. Ved suksess kan erstatningen overskrive den endelige filen, så velg policyen bevisst.

Bruk unike midlertidige navn for samtidige jobber. Separate åpnerobjekter beskytter ikke jobber som deler samme .part-sti.

Innstillingen på 20 sekunder begrenser støttede socket-operasjoner, ikke den totale nedlastingstiden. En frist for hele jobben krever egen håndtering i applikasjonen. Fullføringen av overføringen er også atskilt fra verifiseringen av den nedlastede filen.

Relaterte artikler