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)

Amnewidiwch yr URLau a'r enwau ffeiliau ar gyfer y rhaglen. Ar gyfer lawrlwytho ffeil gyhoeddus a ganiateir heb ddilysu dirprwy, gall y rhestr dirprwyon HTTP ddarparu pwyntiau terfyn posibl ar gyfer URL y dirprwy. Mae'r opener urllib pwrpasol hwn yn defnyddio dirprwy HTTP ar gyfer cyrchfan HTTPS gyda gwirio tystysgrif arferol. Nid yw'n gosod opener byd-eang; mae dilysu, os oes ei angen, yn gofyn am ei osodiad a gefnogir.

Mae copyfileobj yn copïo mewn darnau. Mae gadael cyd-destun y ffeil yn ei chau ac yn fflysio ysgrifau byffer cyn i os.replace osod yr enw terfynol.

Os bydd'r cais neu'r copïo yn codi gwall, caiff yr ailenwi ei hepgor. Gall ffeil rannol aros ar gyfer y polisi glanhau, ac mae'r llif hwn yn gadael ffeil derfynol bresennol yn gyffwrdd yn y methiant hwnnw. Ar lwyddiant, gall yr amnewid drosysgrifo'r ffeil derfynol honno, felly dewiswch y polisi'n fwriadol.

Defnyddiwch enwau dros dro unigryw ar gyfer swyddi cyfochrog. Nid yw gwrthrychau opener ar wahân yn amddiffyn swyddi sy'n rhannu'r un llwybr .part.

Mae'r gosodiad 20 eiliad yn cyfyngu ar weithrediadau soced a gefnogir yn hytrach na chyfanswm amser lawrlwytho. Mae angen trin cais ar wahân ar gyfer terfyn amser y swydd gyfan. Mae cwblhau'r trosglwyddiad hefyd ar wahân i wirio'r ffeil a lawrlwythwyd.

Erthyglau cysylltiedig