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)

Pakeiskite URL ir failų pavadinimus programos reikmėms. Leidžiamam viešo failo atsisiuntimui be proksio autentifikavimo HTTP proksių sąrašas gali pasiūlyti galimus galinius taškus proksio URL. Šis specialus urllib atidarytuvas naudoja HTTP proksį HTTPS paskirties vietai su įprastu sertifikato tikrinimu. Jis neįdiegia visuotinio atidarytuvo; autentifikavimas, jei reikia, reikalauja jo palaikomos konfigūracijos.

copyfileobj kopijuoja dalimis. Išėjus iš failo konteksto failas uždaromas ir buferiniai įrašai išstumiami prieš os.replace nustatant galutinį pavadinimą.

Jei užklausa ar kopijavimas iškelia klaidą, pervadinimas praleidžiamas. Valymo politikai gali likti dalinis failas, ir šis srautas palieka esamą galutinį failą nepaliestą toje klaidoje. Sėkmės atveju pakeitimas gali perrašyti tą galutinį failą, todėl politiką rinkitės sąmoningai.

Naudokite unikalius laikinus pavadinimus lygiagrečioms užduotims. Atskiri atidarytuvo objektai neapsaugo užduočių, kurios dalijasi tuo pačiu .part keliu.

20 sekundžių nuostata riboja palaikomas lizdo operacijas, o ne bendrą atsisiuntimo laiką. Visos užduoties terminui reikia atskiro apdorojimo programoje. Perdavimo užbaigimas taip pat atskirtas nuo atsisiųsto failo patikrinimo.

Susiję straipsniai