Preuzimanje preko proxyja s Requests i iter_content
Trošite odgovor Requests postupno uz zadržavanje uobičajenih provjera statusa, čišćenja i namjerne politike 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 obrazac s postojećom Requests sesijom aplikacije, proxy rutama, URL-om i privremenom izlaznom putanjom. Za javnu HTTP rutu, lista HTTP proxyja daje kandidatske adrese za vaše proxy mapiranje. Obrazac strujanja troši tijelo postupno umjesto da pribavi response.content i zatim zapiše drugi objekt pune veličine.
Zadržite to svojstvo tokom 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 lokaciji 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.