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)

Ordeztu URLak eta fitxategi-izenak aplikazioarenekin. Proxy autentifikaziorik gabeko fitxategi publiko baten deskarga baimendurako, HTTP proxy zerrendak proxy URLarentzako amaierako puntu hautagaiak eman ditzake. urllib irekigailu dedikatu honek HTTP proxy bat erabiltzen du HTTPS helmugarako ziurtagiriaren egiaztatze arruntarekin. Ez du irekigailu globalik instalatzen; autentifikazioak, beharrezkoa bada, bere konfigurazio onartua behar du.

copyfileobj blokeka kopiatzen du. Fitxategiaren testuingurutik irteteak fitxategia ixten du eta bufferreko idazketak husten ditu os.replace azken izena instalatu aurretik.

Eskaerak edo kopiak errore bat sortzen badu, berrizendatzea saltatzen da. Fitxategi partzial bat gera daiteke garbiketa-politikarako, eta fluxu honek lehendik dagoen azken fitxategia ukitugabe uzten du hutsegite horretan. Arrakasta izanez gero, ordezkapenak azken fitxategi hori gainidatz dezake, beraz, aukeratu politika nahita.

Erabili aldi baterako izen bakarrak lan paraleloetarako. Irekigailu objektu bereiziek ez dituzte babesten .part bidea partekatzen duten lanak.

20 segundoko ezarpenak onartutako socket eragiketak mugatzen ditu, ez deskargaren denbora osoa. Lan osoaren epea aplikazioan aparte kudeatu behar da. Transferentziaren amaiera ere deskargatutako fitxategia egiaztatzetik bereizia da.

Erlazionatutako artikuluak