Stahování přes proxy s Requests a iter_content
Konzumujte odpověď Requests postupně a přitom zachovejte obvyklé kontroly stavu, úklid a záměrnou politiku pro částečný výstup.
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)
Tento vzor použijte s existující relací Requests aplikace, trasami proxy, URL a dočasnou výstupní cestou. Pro veřejnou trasu HTTP poskytuje seznam HTTP proxy kandidátní adresy pro vaše mapování proxy. Vzor streamování konzumuje tělo postupně místo získání response.content a následného zápisu druhého objektu plné velikosti.
Tuto vlastnost zachovejte po celou dobu stahování: stream=True odkládá tělo, ale přístup k response.content poté jej stále může shromáždit celý do paměti. Velikost části u iter_content je preference čtení, nikoli požadavek na HTTP přenosové kódování po částech na webu nebo proxy.
Správce kontextu odpovědi zavře odpověď, i když zápis selže nebo aplikace skončí dříve. Ilustrativní dvojice časových limitů není pevný termín pro celý přenos; nastavte politiku životnosti stahování podle potřeby zvlášť.
Po úspěšné konzumaci zkontrolujte artefakt, který aplikace očekává, než zveřejníte jeho konečný název. Při přerušení uchovávejte částečný soubor pouze podle záměrné politiky obnovení, s metadaty identifikujícími vzdálenou reprezentaci. Neprázdný dočasný soubor není úspěšné stažení.