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)

Użyj tego wzorca z istniejącą sesją Requests aplikacji, trasami proxy, adresem URL i tymczasową ścieżką wyjściową. Dla publicznej trasy HTTP lista proxy HTTP dostarcza adresy kandydujące do mapowania proxy. Wzorzec strumieniowania konsumuje treść stopniowo, zamiast pobierać response.content i następnie zapisywać drugi pełnowymiarowy obiekt.

Zachowaj tę właściwość przez całe pobieranie: stream=True odracza treść, ale późniejszy dostęp do response.content nadal może zebrać ją całą w pamięci. Rozmiar fragmentu w iter_content to preferencja odczytu, a nie żądanie kodowania przesyłu HTTP fragmentami w witrynie lub proxy.

Menedżer kontekstu odpowiedzi zamyka odpowiedź, nawet jeśli zapis się nie powiedzie lub aplikacja zatrzyma się wcześniej. Przykładowa para limitów czasu nie jest terminem rzeczywistym dla całego przesyłu; ustaw politykę czasu życia pobierania osobno, jeśli to konieczne.

Po udanej konsumpcji sprawdź artefakt oczekiwany przez aplikację przed opublikowaniem jego ostatecznej nazwy. W razie przerwania zachowaj plik częściowy tylko zgodnie ze świadomą polityką wznawiania, z metadanymi identyfikującymi zdalną reprezentację. Niepusty plik tymczasowy nie jest udanym pobraniem.

Powiązane artykuły