Download gennem en proxy med Requests og iter_content
Forbrug et Requests-svar trinvist, mens de normale statuskontroller, oprydning og en bevidst politik for delvist output bevares.
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)
Brug dette mønster med applikationens eksisterende Requests-session, proxy-ruter, URL og midlertidige outputsti. Til en offentlig HTTP-rute leverer HTTP-proxylisten kandidatadresser til din proxy-mapping. Streamingmønstret forbruger kroppen trinvist i stedet for at hente response.content og derefter skrive et andet objekt i fuld størrelse.
Bevar den egenskab gennem hele downloadet: stream=True udsætter kroppen, men adgang til response.content bagefter kan stadig samle det hele i hukommelsen. iter_content-stykkets størrelse er en læsepræference, ikke en anmodning om HTTP-chunked transfer-kodning på webstedet eller proxyen.
Svarets kontekstmanager lukker svaret, selv hvis en skrivning fejler, eller applikationen stopper tidligt. Det illustrerede timeout-par er ikke en wall-clock-frist for hele overførslen; indstil downloadets levetidspolitik separat efter behov.
Efter vellykket forbrug skal du kontrollere det artefakt, applikationen forventer, før du offentliggør dets endelige navn. Ved afbrydelse må den delvise fil kun beholdes under en bevidst genoptagelsespolitik med metadata, der identificerer den eksterne repræsentation. En ikke-tom midlertidig fil er ikke et vellykket download.