הורדה דרך פרוקסי עם 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 מקוטע באתר או בפרוקסי.
מנהל ההקשר של התגובה סוגר את התגובה גם אם כתיבה נכשלת או היישום עוצר מוקדם. צמד פסקי הזמן המתואר אינו מועד סופי בזמן אמת לכל ההעברה; הגדירו את מדיניות אורך החיים של ההורדה בנפרד לפי הצורך.
לאחר צריכה מוצלחת, בדקו את התוצר שהיישום מצפה לו לפני פרסום שמו הסופי. בהפרעה, שמרו את הקובץ החלקי רק תחת מדיניות המשך מכוונת, עם מטא-נתונים שמזהים את הייצוג המרוחק. קובץ זמני שאינו ריק אינו הורדה מוצלחת.