Preuzimanje preko proxyja uz Requests i iter_content
Trošite odgovor Requests postupno, zadržavajući uobičajene provjere statusa, čišćenje i namjernu politiku za djelomični izlaz.
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)
Koristite ovaj uzorak s postojećom Requests sesijom aplikacije, proxy rutama, URL-om i privremenom izlaznom putanjom. Za javnu HTTP rutu, popis HTTP proxyja daje kandidatne adrese za vaše proxy mapiranje. Uzorak strujanja troši tijelo postupno umjesto da pribavi response.content i zatim zapiše drugi objekt pune veličine.
Zadržite to svojstvo tijekom cijelog preuzimanja: stream=True odgađa tijelo, ali pristup response.content nakon toga ipak može sve skupiti u memoriju. Veličina dijela kod iter_content je preferencija čitanja, a ne zahtjev za HTTP kodiranjem prijenosa u dijelovima na web-mjestu ili proxyju.
Upravitelj konteksta odgovora zatvara odgovor čak i ako pisanje ne uspije ili se aplikacija zaustavi ranije. Ilustrativni par vremenskih ograničenja nije stvarni krajnji rok za cijeli prijenos; postavite politiku trajanja preuzimanja odvojeno prema potrebi.
Nakon uspješnog trošenja, provjerite artefakt koji aplikacija očekuje prije objavljivanja konačnog naziva. Pri prekidu zadržite djelomičnu datoteku samo pod namjernom politikom nastavka, s metapodacima koji identificiraju udaljenu reprezentaciju. Neprazna privremena datoteka nije uspješno preuzimanje.