Python urllib менен прокси аркылуу жүктөөнү файлга агым менен берүү
Прокси аркылуу жүктөөнү убактылуу файлга агым менен берип, акыркы файл атын көчүрүү бүткөндөн кийин гана жарыялаңыз.
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)Колдонмо үчүн URL жана файл аттарын алмаштырыңыз. Прокси аутентификациясыз уруксат берилген коомдук файлды жүктөө үчүн HTTP прокси тизмеси прокси URL үчүн талапкер акыркы чекиттерди бере алат. Бул атайын urllib ачкычы HTTPS максаты үчүн сертификатты кадимкидей текшерүү менен HTTP проксини колдонот. Ал глобалдык ачкычты орнотпойт; керек болсо, аутентификация анын колдоого алынган жөндөөсүн талап кылат.
copyfileobj бөлүктөр менен көчүрөт. Файл контекстен чыгуу аны жабат жана os.replace акыркы атты орнотуудан мурун буферленген жазууларды тазалайт.
Эгер суроо же көчүрүү ката көтөрсө, кайра атоо өткөрүп жиберилет. Тазалоо саясаты үчүн жарым файл калышы мүмкүн, жана бул агым ошол ийгиликсиздикте бар акыркы файлды тийбей калтырат. Ийгиликтүү болсо, алмаштыруу ошол акыркы файлдын үстүнөн жаза алат, ошондуктан саясатты атайын тандаңыз.
Кошумча иштер үчүн уникалдуу убактылуу аттарды колдонуңуз. Өзүнчө ачкыч объектилери бирдей .part жолун бөлүшкөн иштерди коргобойт.
20 секунддук жөндөө жалпы жүктөө убактысын эмес, колдоого алынган сокет операцияларын чектейт. Бүт иштин мөөнөтү колдонмодо өзүнчө иштетүүнү талап кылат. Трансфердин бүтүшү да жүктөлгөн файлды текшерүүдөн өзүнчө.