Pobieranie przez proxy z Requests i iter_content
Konsumuj odpowiedź Requests stopniowo, zachowując zwykłe kontrole statusu, sprzątanie i świadomą politykę częściowego wyjścia.
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.