with session.get(url, stream=True, proxies=routes,
                 timeout=(5, 30)) as response:
    response.raise_for_status()
    with open(part_path, 'wb') as output:
        for chunk in response.iter_content(chunk_size=64 * 1024):
            if chunk:
                output.write(chunk)

Gebruik dit patroon met de bestaande Requests-sessie van de toepassing, de proxy-routes, de URL en het tijdelijke uitvoerpad. Voor een openbare HTTP-route levert de HTTP-proxylijst kandidaatadressen voor je proxy-mapping. Het streamingpatroon verbruikt de body stapsgewijs in plaats van response.content op te halen en daarna een tweede object op volledige grootte te schrijven.

Behoud die eigenschap tijdens de hele download: stream=True stelt de body uit, maar toegang tot response.content daarna kan hem nog steeds volledig in het geheugen verzamelen. De chunkgrootte van iter_content is een leesvoorkeur, geen verzoek om HTTP-chunked-transfercodering op de website of de proxy.

De contextmanager van de respons sluit de respons zelfs als een schrijfactie mislukt of de toepassing vroeg stopt. Het geïllustreerde time-outpaar is geen echte deadline voor de hele overdracht; stel het levensduurbeleid van de download indien nodig apart in.

Controleer na succesvol verbruik het artefact dat de toepassing verwacht voordat je de definitieve naam publiceert. Bij onderbreking bewaar je het gedeeltelijke bestand alleen onder een bewust hervatbeleid, met metadata die de externe representatie identificeren. Een niet-lege tijdelijke file is geen geslaagde download.

Gerelateerde artikelen