Strim muat turun melalui proksi ke fail dengan Python urllib
Strim muat turun melalui proksi ke fail sementara dan terbitkan nama fail akhir hanya selepas salinan selesai.
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)Gantikan URL dan nama fail untuk aplikasi. Untuk muat turun fail awam yang dibenarkan tanpa pengesahan proksi, senarai proksi HTTP boleh menyediakan titik akhir calon untuk URL proksi. Pembuka urllib khusus ini menggunakan proksi HTTP untuk destinasi HTTPS dengan pengesahan sijil biasa. Ia tidak memasang pembuka global; pengesahan, jika perlu, memerlukan persediaan yang disokongnya.
copyfileobj menyalin mengikut ketulan. Keluar dari konteks fail menutupnya dan menyiram tulisan yang dibuffer sebelum os.replace memasang nama akhir.
Jika permintaan atau salinan menimbulkan ralat, penamaan semula dilangkau. Fail separa mungkin kekal untuk dasar pembersihan, dan aliran ini membiarkan fail akhir sedia ada tidak disentuh pada kegagalan itu. Jika berjaya, penggantian boleh menimpa fail akhir itu, jadi pilih dasar itu dengan sengaja.
Gunakan nama sementara yang unik untuk kerja serentak. Objek pembuka yang berasingan tidak melindungi kerja yang berkongsi laluan .part yang sama.
Tetapan 20 saat mengehadkan operasi soket yang disokong, bukan jumlah masa muat turun. Had masa untuk keseluruhan kerja memerlukan pengendalian berasingan dalam aplikasi. Penyempurnaan pemindahan juga berasingan daripada pengesahan fail yang dimuat turun.