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)

Usa este patrón coa sesión de Requests existente da aplicación, as rutas de proxy, a URL e a ruta de saída temporal. Para unha ruta HTTP pública, a lista de proxies HTTP fornece enderezos candidatos para a túa asignación de proxy. O patrón de transmisión consome o corpo de xeito incremental en lugar de obter response.content e despois escribir un segundo obxecto de tamaño completo.

Mantén esa propiedade durante toda a descarga: stream=True apraza o corpo, pero acceder a response.content despois aínda pode recompilalo todo na memoria. O tamaño de fragmento de iter_content é unha preferencia de lectura, non unha solicitude de codificación de transferencia HTTP por fragmentos no sitio web ou no proxy.

O xestor de contexto da resposta pecha a resposta mesmo se unha escritura falla ou a aplicación se detén cedo. O par de tempos de espera ilustrativo non é un prazo de reloxo para toda a transferencia; establece a política de vida da descarga por separado segundo sexa necesario.

Tras un consumo correcto, comproba o artefacto que espera a aplicación antes de publicar o seu nome final. Nunha interrupción, conserva o ficheiro parcial só baixo unha política de reanudación deliberada, con metadatos que identifiquen a representación remota. Un ficheiro temporal non baleiro non é unha descarga correcta.

Artigos relacionados