Descărcare prin proxy cu Requests și iter_content
Consumați un răspuns Requests incremental, păstrând verificările obișnuite de stare, curățarea și o politică deliberată pentru ieșirea parțială.
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)
Folosiți acest model cu sesiunea Requests existentă a aplicației, rutele proxy, URL-ul și calea de ieșire temporară. Pentru o rută HTTP publică, lista de proxy-uri HTTP oferă adrese candidate pentru maparea proxy. Modelul de streaming consumă corpul incremental în loc să obțină response.content și apoi să scrie un al doilea obiect de dimensiune completă.
Păstrați această proprietate pe tot parcursul descărcării: stream=True amână corpul, dar accesarea response.content ulterior poate încă să îl adune tot în memorie. Dimensiunea fragmentului din iter_content este o preferință de citire, nu o cerere de codificare a transferului HTTP pe fragmente la site sau la proxy.
Managerul de context al răspunsului închide răspunsul chiar dacă o scriere eșuează sau aplicația se oprește devreme. Perechea de timeout-uri ilustrativă nu este un termen real pentru întregul transfer; setați politica de durată de viață a descărcării separat, după nevoie.
După o consumare reușită, verificați artefactul așteptat de aplicație înainte de a publica numele final. La întrerupere, păstrați fișierul parțial doar sub o politică deliberată de reluare, cu metadate care identifică reprezentarea de la distanță. Un fișier temporar nevid nu este o descărcare reușită.