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)

Ta i bruk dette mønsteret sammen med applikasjonens eksisterende Requests-økt, proxy-rutene, URL-en og den midlertidige utdatafilen. For en åpen HTTP-rute gir listen over HTTP-proxyer kandidatadresser til proxy-konfigurasjonen din. Strømmingen leser kroppen gradvis i stedet for å hente response.content og deretter skrive et nytt objekt i full størrelse.

Hold fast ved den egenskapen gjennom hele nedlastingen: stream=True utsetter kroppen, men et senere kall på response.content kan likevel legge alt i minnet. iter_content sin stykkestørrelse er et leseønske, ikke et krav om HTTP-chunked overføringskoding hos nettstedet eller proxyen.

Svarkonteksten lukker svaret selv når en skriving feiler eller applikasjonen avslutter tidlig. Tidsavbruddsparet i eksempelet er ingen absolutt frist for hele overføringen; fastsett retningslinjen for nedlastingens levetid separat når det trengs.

Etter at innholdet er lest inn, kontroller filen applikasjonen forventer før du kunngjør det endelige navnet. Ved avbrudd skal delfilen bare beholdes etter en bevisst gjenopptakelsesregel, med metadata som identifiserer den eksterne representasjonen. En midlertidig fil som ikke er tom, er ingen vellykket nedlasting.

Relaterte artikler