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)

Utilitza aquest patró amb la sessió de Requests existent de l'aplicació, les rutes de proxy, l'URL i el camí de sortida temporal. Per a una ruta HTTP pública, la llista de proxys HTTP proporciona adreces candidates per al teu mapatge de proxy. El patró de transmissió consumeix el cos de manera incremental en lloc d'obtenir response.content i després escriure un segon objecte de mida completa.

Mantén aquesta propietat durant tota la baixada: stream=True ajorna el cos, però accedir a response.content després encara pot reunir-ho tot a la memòria. La mida dels fragments d'iter_content és una preferència de lectura, no una petició de codificació de transferència HTTP fragmentada al lloc web o al proxy.

El gestor de context de la resposta tanca la resposta encara que una escriptura falli o l'aplicació s'aturi aviat. El parell de temps d'espera il·lustratiu no és un termini de rellotge per a tota la transferència; estableix la política de vida de la baixada per separat segons calgui.

Després d'un consum correcte, comprova l'artefacte que espera l'aplicació abans de publicar-ne el nom final. En cas d'interrupció, conserva el fitxer parcial només sota una política de represa deliberada, amb metadades que identifiquin la representació remota. Un fitxer temporal no buit no és una baixada correcta.

Articles relacionats