ดาวน์โหลดผ่านพร็อกซีด้วย Requests และ iter_content
บริโภคการตอบกลับของ Requests ทีละส่วน โดยคงการตรวจสอบสถานะตามปกติ การล้างข้อมูล และนโยบายที่ตั้งใจไว้สำหรับเอาต์พุตบางส่วน
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)
ใช้รูปแบบนี้กับเซสชัน Requests ที่มีอยู่ของแอป เส้นทางพร็อกซี URL และพาธเอาต์พุตชั่วคราว สำหรับเส้นทาง HTTP สาธารณะ รายการพร็อกซี HTTP ให้ที่อยู่ที่เป็นตัวเลือกสำหรับการแมปพร็อกซีของคุณ รูปแบบสตรีมมิ่งบริโภคเนื้อหาแบบทีละส่วนแทนการเรียก response.content แล้วเขียนออบเจ็กต์ที่สองขนาดเต็ม
รักษาคุณสมบัตินั้นตลอดการดาวน์โหลด: stream=True เลื่อนเนื้อหาออกไป แต่การเข้าถึง response.content ภายหลังยังสามารถรวบรวมทั้งหมดไว้ในหน่วยความจำได้ ขนาดชังก์ของ iter_content เป็นการตั้งค่าการอ่าน ไม่ใช่คำขอเข้ารหัสการถ่ายโอน HTTP แบบแบ่งชังก์ที่เว็บไซต์หรือพร็อกซี
ตัวจัดการบริบทของการตอบกลับจะปิดการตอบกลับแม้การเขียนล้มเหลวหรือแอปหยุดก่อนเวลา คู่เวลาหมดเวลาที่แสดงเป็นตัวอย่างไม่ใช่กำหนดเวลาจริงสำหรับการถ่ายโอนทั้งหมด ตั้งนโยบายอายุการดาวน์โหลดแยกต่างหากตามต้องการ
หลังจากบริโภคสำเร็จ ให้ตรวจสอบอาร์ติแฟกต์ที่แอปคาดหวังก่อนเผยแพร่ชื่อสุดท้าย เมื่อถูกขัดจังหวะ ให้เก็บไฟล์บางส่วนไว้ภายใต้นโยบายการเริ่มใหม่ที่ตั้งใจไว้เท่านั้น พร้อมเมทาดาทาที่ระบุการแทนระยะไกล ไฟล์ชั่วคราวที่ไม่ว่างเปล่าไม่ใช่การดาวน์โหลดที่สำเร็จ