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)

Asendage URL-id ja failinimed rakenduse omadega. Lubatud avaliku faili allalaadimiseks ilma puhverserveri autentimiseta võib HTTP puhverserverite loend pakkuda puhverserveri URL-i jaoks võimalikke lõpp-punkte. See spetsiaalne urllib-avaja kasutab HTTPS-sihtkohale HTTP puhverserverit tavalise sertifikaadi kontrolliga. See ei paigalda üldist avajat; autentimine vajab vajaduse korral selle toetatud seadistust.

copyfileobj kopeerib tükkidena. Faili kontekstist väljumine sulgeb faili ja tühjendab puhverdatud kirjutused enne, kui os.replace paigaldab lõpliku nime.

Kui päring või kopeerimine tekitab erindi, jäetakse ümbernimetamine vahele. Puhastuspoliitika jaoks võib jääda osaline fail ja see voog jätab selle nurjumise korral olemasoleva lõpliku faili puutumata. Õnnestumise korral võib asendamine selle lõpliku faili üle kirjutada, seega valige poliitika teadlikult.

Kasutage paralleelsete tööde jaoks unikaalseid ajutisi nimesid. Eraldi avaja objektid ei kaitse töid, mis jagavad sama .part teed.

20 sekundi seade piirab toetatud soketi toiminguid, mitte kogu allalaadimisaega. Kogu töö tähtaja jaoks on vaja eraldi rakendusepoolset käsitlust. Ülekande lõppemine on samuti eraldi allalaaditud faili kontrollimisest.

Seotud artiklid