In proxy-download streame nei in bestân mei Python urllib
Stream in proxy-download nei in tydlik bestân en publisearje de definitive bestânsnamme pas neidat it kopiearjen foltôge is.
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)Ferfange de URL's en bestânsnammen troch dy fan 'e applikaasje. Foar in tastiene download fan in iepenbier bestân sûnder proxy-autentikaasje kin de HTTP-proksylist kandidaat-einpunten leverje foar de proxy-URL. Dizze spesjale urllib-iepener brûkt in HTTP-proxy foar in HTTPS-bestimming mei normale sertifikaatferifikaasje. Hy ynstallearret gjin globale iepener; autentikaasje fereasket, as dat nedich is, syn stipe ynstelling.
copyfileobj kopiearret yn stikken. It ferlitten fan 'e bestânskontekst slút it bestân en flusht bufferde skriuwen foardat os.replace de definitive namme ynstallearret.
As it fersyk of it kopiearjen in flater smyt, wurdt it werneamen oerslein. In partiel bestân kin efterbliuwe foar it opskjinbelied, en dizze stream lit in besteand definitief bestân ûnoantaast by dy mislearring. By sukses kin de ferfanging dat definitive bestân oerskriuwe, kies it belied dus bewust.
Brûk unike tydlike nammen foar parallelle taken. Aparte iepener-objekten beskermje taken dy't itselde .part-paad diele net.
De ynstelling fan 20 sekonden beheint stipe socket-operaasjes, net de totale downloadtiid. In deadline foar de hiele taak fereasket aparte ôfhanneling yn 'e applikaasje. It foltôgjen fan 'e oerdracht is ek apart fan it ferifiearjen fan it downloadde bestân.