Scaricare attraverso un proxy con Requests e iter_content
Consuma una risposta di Requests in modo incrementale mantenendo i normali controlli di stato, la pulizia e una politica deliberata per l'output parziale.
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)
Usa questo modello con la sessione Requests esistente dell'applicazione, le rotte del proxy, l'URL e il percorso di output temporaneo. Per una rotta HTTP pubblica, la lista di proxy HTTP fornisce indirizzi candidati per la tua mappatura del proxy. Il modello di streaming consuma il corpo in modo incrementale invece di ottenere response.content e poi scrivere un secondo oggetto di dimensioni complete.
Mantieni questa proprietà per tutto il download: stream=True rinvia il corpo, ma accedere successivamente a response.content può comunque raccoglierlo tutto in memoria. La dimensione dei blocchi di iter_content è una preferenza di lettura, non una richiesta di codifica di trasferimento HTTP a blocchi sul sito o sul proxy.
Il gestore di contesto della risposta chiude la risposta anche se una scrittura fallisce o l'applicazione si arresta in anticipo. La coppia di timeout illustrativa non è una scadenza a orologio per l'intero trasferimento; imposta la politica di durata del download separatamente secondo necessità.
Dopo un consumo riuscito, verifica l'artefatto atteso dall'applicazione prima di pubblicarne il nome finale. In caso di interruzione, conserva il file parziale solo secondo una politica di ripresa deliberata, con metadati che identificano la rappresentazione remota. Un file temporaneo non vuoto non è un download riuscito.