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)

Cserélje ki az URL-eket és a fájlneveket az alkalmazás sajátjaira. Egy engedélyezett nyilvános fájl proxy-hitelesítés nélküli letöltéséhez a HTTP proxy lista jelölt végpontokat adhat a proxy URL-hez. Ez a dedikált urllib-megnyitó HTTP proxyt használ HTTPS célhoz, normál tanúsítvány-ellenőrzéssel. Nem telepít globális megnyitót; a hitelesítéshez, ha szükséges, annak támogatott beállítása kell.

copyfileobj darabokban másol. A fájlkontextus elhagyása bezárja a fájlt, és kiüríti a pufferelt írásokat, mielőtt os.replace beállítja a végleges nevet.

Ha a kérés vagy a másolás hibát dob, az átnevezés kimarad. A tisztítási szabályzat szerint maradhat részleges fájl, és ez a folyamat a meglévő végleges fájlt érintetlenül hagyja a hiba esetén. Siker esetén a csere felülírhatja azt a végleges fájlt, ezért tudatosan válassza meg a szabályzatot.

Használjon egyedi ideiglenes neveket a párhuzamos feladatokhoz. A külön megnyitó objektumok nem védik az ugyanazt a .part útvonalat megosztó feladatokat.

A 20 másodperces beállítás a támogatott socket-műveleteket korlátozza, nem a teljes letöltési időt. A teljes feladat határidejéhez külön alkalmazáskezelés kell. Az átvitel befejezése szintén elkülönül a letöltött fájl ellenőrzésétől.

Kapcsolódó cikkek