دانلود از طریق پروکسی با 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 برنامه، مسیرهای پروکسی، نشانی و مسیر خروجی موقت به کار ببرید. برای یک مسیر عمومی HTTP، فهرست پروکسی HTTP نشانیهای نامزد را برای نگاشت پروکسی شما فراهم میکند. الگوی جریانی، بدنه را بهصورت تدریجی مصرف میکند بهجای گرفتن response.content و سپس نوشتن یک شیء دوم با اندازه کامل.
این ویژگی را در سراسر دانلود حفظ کنید: stream=True بدنه را به تعویق میاندازد، اما دسترسی به response.content پس از آن هنوز میتواند همه را در حافظه جمع کند. اندازهٔ قطعهٔ iter_content یک ترجیح خواندن است، نه درخواست کدگذاری انتقال تکهتکهی HTTP در وبگاه یا پروکسی.
مدیر زمینهٔ پاسخ، پاسخ را میبندد حتی اگر نوشتن شکست بخورد یا برنامه زودتر متوقف شود. جفت مهلت نمونه، یک ضربالاجل زمانی برای کل انتقال نیست؛ سیاست عمر دانلود را در صورت نیاز جداگانه تنظیم کنید.
پس از مصرف موفق، پیش از انتشار نام نهایی، مصنوع مورد انتظار برنامه را بررسی کنید. در صورت قطع، فایل ناقص را فقط زیر سیاست آگاهانهٔ ازسرگیری نگه دارید، همراه با فرادادهای که نمایش دوردست را مشخص میکند. یک فایل موقت غیرخالی دانلود موفق نیست.