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)

Skiptu út slóðum og skráarheitum fyrir þau sem forritið notar. Fyrir leyfða niðurhali á opinberri skrá án auðkenningar milliþjóns getur listi yfir HTTP-milliþjóna veitt mögulega endapunkta fyrir slóð milliþjónsins. Þessi sérhæfði urllib-opnari notar HTTP-milliþjón fyrir HTTPS-áfangastað með venjulegri vottorðsstaðfestingu. Hann setur ekki upp alþjóðlegan opnara; auðkenning krefst, ef þörf krefur, studdrar uppsetningar hans.

copyfileobj afritar í bútum. Að yfirgefa skráarsamhengið lokar henni og hreinsar biðminnið skrif áður en os.replace setur endanlega heitið.

Ef beiðnin eða afritunin kastar villu er endurnefningunni sleppt. Hluti skrár getur orðið eftir fyrir hreinsunarstefnuna, og þetta ferli lætur fyrirliggjandi endanlega skrá ósnerta við þá bilun. Við árangur getur skiptingin skrifað yfir þá endanlegu skrá, svo veldu stefnuna viljandi.

Notaðu einstök tímabundin heiti fyrir samhliða verk. Aðskildir opnara-hlutir verja ekki verk sem deila sömu .part slóðinni.

Stillingin 20 sekúndur takmarkar studdar socket-aðgerðir, ekki heildarniðurhalstímann. Fyrir allt verkið þarf sérstaka meðferð í forritinu. Lokið flutningur er líka aðskilinn frá staðfestingu niðurhalaðrar skrár.

Tengdir greinar