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)

Utilisez ce modèle avec la session Requests existante de l'application, les routes de proxy, l'URL et le chemin de sortie temporaire. Pour une route HTTP publique, la liste de proxys HTTP fournit des adresses candidates pour votre mappage de proxy. Le modèle de flux consomme le corps de façon incrémentale au lieu d'obtenir response.content puis d'écrire un second objet de taille complète.

Conservez cette propriété pendant tout le téléchargement : stream=True diffère le corps, mais accéder ensuite à response.content peut encore tout rassembler en mémoire. La taille de fragment d'iter_content est une préférence de lecture, pas une demande de codage de transfert HTTP fragmenté sur le site ou le proxy.

Le gestionnaire de contexte de la réponse ferme la réponse même si une écriture échoue ou si l'application s'arrête tôt. La paire de délais illustrée n'est pas une échéance en temps réel pour tout le transfert ; définissez la politique de durée de vie du téléchargement séparément selon les besoins.

Après une consommation réussie, vérifiez l'artefact attendu par l'application avant de publier son nom final. En cas d'interruption, ne conservez le fichier partiel que dans le cadre d'une politique de reprise délibérée, avec des métadonnées identifiant la représentation distante. Un fichier temporaire non vide n'est pas un téléchargement réussi.

Articles similaires