Mag-download sa pamamagitan ng proxy gamit ang Requests at iter_content
Konsumahin ang tugon ng Requests nang paunti-unti habang pinapanatili ang karaniwang pagsusuri ng status, paglilinis at sinadyang patakaran para sa bahagyang output.
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)
Gamitin ang pattern na ito sa umiiral nang Requests session ng app, mga ruta ng proxy, URL at pansamantalang landas ng output. Para sa pampublikong rutang HTTP, ang listahan ng HTTP proxy ay nagbibigay ng mga kandidatong address para sa iyong proxy mapping. Ang pattern ng streaming ay kumokonsumo ng katawan nang paunti-unti sa halip na kunin ang response.content at pagkatapos ay magsulat ng pangalawang buong-laki na bagay.
Panatilihin ang katangiang iyon sa buong pag-download: ipinagpaliban ng stream=True ang katawan, ngunit ang pag-access sa response.content pagkatapos ay maaari pa ring tipunin ang lahat sa memorya. Ang laki ng tipak ng iter_content ay kagustuhan sa pagbasa, hindi kahilingan para sa HTTP chunked transfer encoding sa website o proxy.
Isinasara ng context manager ng tugon ang tugon kahit nabigo ang pagsulat o huminto nang maaga ang app. Ang halimbawang pares ng timeout ay hindi tunay na takdang oras para sa buong paglilipat; itakda ang patakaran sa haba ng buhay ng pag-download nang hiwalay kung kailangan.
Pagkatapos ng matagumpay na konsumo, suriin ang artifact na inaasahan ng app bago ilathala ang huling pangalan nito. Kapag naantala, itago lamang ang bahagyang file sa ilalim ng sinadyang patakaran sa pagpapatuloy, may metadata na tumutukoy sa malayong representasyon. Ang pansamantalang file na hindi walang laman ay hindi matagumpay na pag-download.