Tiririsha upakuaji kupitia proksi hadi faili kwa Python urllib
Tiririsha upakuaji kupitia proksi hadi faili la muda na tangaza jina la mwisho la faili tu baada ya kunakili kukamilika.
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)Badilisha URL na majina ya faili kwa yale ya programu. Kwa upakuaji unaoruhusiwa wa faili la umma bila uthibitishaji wa proksi, orodha ya proksi za HTTP inaweza kutoa vituo vya mwisho vinavyowezekana kwa URL ya proksi. Kifunguzi hiki maalum cha urllib hutumia proksi ya HTTP kwa lengo la HTTPS na uthibitishaji wa kawaida wa cheti. Hakisakii kifunguzi cha kimataifa; uthibitishaji, ikihitajika, unahitaji usanidi wake unaotumika.
copyfileobj hunakili kwa vipande. Kutoka kwenye muktadha wa faili hulifunga na kumwaga maandishi yaliyohifadhiwa kabla os.replace kuweka jina la mwisho.
Ikiwa ombi au kunakili kutasababisha hitilafu, kubadilisha jina hukopwa. Faili la sehemu linaweza kubaki kwa sera ya kusafisha, na mtiririko huu huacha faili la mwisho lililopo bila kuguswa katika hitilafu hiyo. Ikifanikiwa, uingizwaji unaweza kuandika juu ya faili hilo la mwisho, kwa hivyo chagua sera kwa makusudi.
Tumia majina ya muda ya kipekee kwa kazi zinazofanyika kwa wakati mmoja. Vitu vya kifunguzi vilivyo tofauti havizalii kazi zinazoshiriki njia sawa ya .part.
Mpangilio wa sekunde 20 hupunguza shughuli za soketi zinazotumika, si muda wote wa upakuaji. Tarehe ya mwisho kwa kazi yote inahitaji usimamizi tofauti kwenye programu. Kukamilika kwa uhamishaji pia ni tofauti na uthibitishaji wa faili lililopakuliwa.