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 секундын тохиргоо нь нийт татаж авалтын хугацаа биш, дэмжигдсэн сокет үйлдлүүдийг хязгаарладаг. Бүх ажлын хугацааны хязгаарт аппликешнд тусдаа зохицуулалт хэрэгтэй. Дамжуулалт дуусах нь мөн татаж авсан файлыг шалгахаас тусдаа юм.

Холбоотой нийтлэлүүд