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)

Verwenden Sie dieses Muster mit der vorhandenen Requests-Sitzung der Anwendung, den Proxy-Routen, der URL und dem temporären Ausgabepfad. Für eine öffentliche HTTP-Route liefert die HTTP-Proxy-Liste Kandidatenadressen für Ihr Proxy-Mapping. Das Streaming-Muster konsumiert den Body schrittweise, statt response.content zu beziehen und dann ein zweites Objekt voller Größe zu schreiben.

Behalten Sie diese Eigenschaft während des gesamten Downloads bei: stream=True verschiebt den Body, aber ein anschließender Zugriff auf response.content kann ihn dennoch vollständig im Speicher sammeln. Die Chunk-Größe von iter_content ist eine Lesepräferenz, keine Anforderung von HTTP-Chunked-Transfer-Kodierung an der Website oder am Proxy.

Der Kontextmanager der Antwort schließt die Antwort auch dann, wenn ein Schreibvorgang fehlschlägt oder die Anwendung früh stoppt. Das dargestellte Timeout-Paar ist keine Echtzeitfrist für die gesamte Übertragung; legen Sie die Lebensdauer-Richtlinie des Downloads bei Bedarf separat fest.

Prüfen Sie nach erfolgreichem Konsum das von der Anwendung erwartete Artefakt, bevor Sie den endgültigen Namen veröffentlichen. Bei Unterbrechung darf die Teil-Datei nur im Rahmen einer bewussten Wiederaufnahmerichtlinie behalten werden, mit Metadaten, die die entfernte Repräsentation identifizieren. Eine nicht leere temporäre Datei ist kein erfolgreicher Download.

Ähnliche Artikel