Lejupielāde caur starpniekserveri ar Requests un iter_content
Patērējiet Requests atbildi pakāpeniski, saglabājot ierastās statusa pārbaudes, tīrīšanu un apzinātu daļējas izvades politiku.
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)
Izmantojiet šo modeli ar lietojumprogrammas esošo Requests sesiju, starpniekservera maršrutiem, URL un pagaidu izvades ceļu. Publiskam HTTP maršrutam HTTP starpniekserveru saraksts nodrošina kandidātu adreses jūsu starpniekservera kartējumam. Straumēšanas modelis patērē ķermeni pakāpeniski, nevis iegūst response.content un pēc tam raksta otru pilna izmēra objektu.
Saglabājiet šo īpašību visā lejupielādes laikā: stream=True atliek ķermeni, bet vēlāka piekļuve response.content joprojām var to visu sakrāt atmiņā. iter_content daļas lielums ir lasīšanas izvēle, nevis HTTP sadalītās pārraides kodējuma pieprasījums vietnē vai starpniekserverī.
Atbildes konteksta pārvaldnieks aizver atbildi arī tad, ja rakstīšana neizdodas vai lietojumprogramma apstājas agri. Ilustratīvais taimautu pāris nav reāllaika termiņš visai pārnesei; iestatiet lejupielādes dzīves ilguma politiku atsevišķi pēc vajadzības.
Pēc veiksmīgas patēriņa, pārbaudiet artefaktu, ko lietojumprogramma sagaida, pirms publicējat tā galīgo nosaukumu. Pārtraukuma gadījumā daļējo failu glabājiet tikai saskaņā ar apzinātu atsākšanas politiku, ar metadatiem, kas identificē attālo attēlojumu. Ne-tukšs pagaidu fails nav veiksmīga lejupielāde.