Atsisiuntimas per tarpinį serverį naudojant Requests ir iter_content
Vartokite Requests atsakymą palaipsniui, išlaikydami įprastus būsenos patikrinimus, valymą ir sąmoningą dalinės išvesties politiką.
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)
Naudokite šį šabloną su esama programos Requests sesija, tarpinio serverio maršrutais, URL ir laikinu išvesties keliu. Viešam HTTP maršrutui HTTP tarpinių serverių sąrašas pateikia kandidatų adresus jūsų tarpinio serverio susiejimui. Srautinio perdavimo šablonas vartoja turinį palaipsniui, o ne gauna response.content ir tada rašo antrą viso dydžio objektą.
Išlaikykite šią savybę viso atsisiuntimo metu: stream=True atideda turinį, bet vėliau prisijungus prie response.content jis vis tiek gali būti surinktas į atmintį. iter_content dalies dydis yra skaitymo nuostata, o ne HTTP dalinio perdavimo koduotės užklausa svetainėje ar tarpiniame serveryje.
Atsakymo konteksto tvarkyklė uždaro atsakymą net jei rašymas nepavyksta arba programa sustoja anksčiau. Pavyzdinė laiko limitų pora nėra realaus laiko terminas visam perdavimui; nustatykite atsisiuntimo gyvavimo politiką atskirai, jei reikia.
Sėkmingai suvartojus, patikrinkite artefaktą, kurio tikisi programa, prieš skelbdami galutinį jo pavadinimą. Nutraukus, dalinį failą laikykite tik pagal sąmoningą atnaujinimo politiką, su metaduomenimis, identifikuojančiais nuotolinę reprezentaciją. Netuščias laikinas failas nėra sėkmingas atsisiuntimas.