Ladda ner via en proxy med Requests och iter_content
Förbruka ett Requests-svar stegvis medan de vanliga statuskontrollerna, städningen och en medveten policy för delvis utdata behålls.
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)
Använd det här mönstret med programmets befintliga Requests-session, proxy-rutterna, URL:en och den tillfälliga utdatasökvägen. För en offentlig HTTP-rutt levererar HTTP-proxylistan kandidatadresser för din proxy-mappning. Strömmande mönstret förbrukar kroppen stegvis i stället för att hämta response.content och sedan skriva ett andra objekt i full storlek.
Behåll den egenskapen under hela nedladdningen: stream=True skjuter upp kroppen, men åtkomst till response.content efteråt kan fortfarande samla allt i minnet. iter_content-styckets storlek är en läsinställning, inte en begäran om HTTP-chunkad överföringskodning på webbplatsen eller proxyn.
Svarets kontexthanterare stänger svaret även om en skrivning misslyckas eller programmet stoppar tidigt. Det illustrerade timeout-paret är ingen verklig tidsgräns för hela överföringen; ställ in policyn för nedladdningens livslängd separat vid behov.
Efter lyckad förbrukning, kontrollera artefakten som programmet förväntar sig innan du publicerar dess slutliga namn. Vid avbrott ska delfilen bara behållas enligt en medveten återupptagningspolicy, med metadata som identifierar den fjärranslutna representationen. En icke-tom tillfällig fil är ingen lyckad nedladdning.