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 চাঙ্কড ট্রান্সফার কোডিংয়ের অনুরোধ নয়।
রেসপন্স কনটেক্সট ম্যানেজার রেসপন্সটি বন্ধ করে দেয়, এমনকি যদি লেখা ব্যর্থ হয় বা অ্যাপ্লিকেশন আগে থেমে যায়। উদাহরণের টাইমআউট জোড়াটি সমগ্র স্থানান্তরের জন্য ওয়াল-ক্লক সময়সীমা নয়; প্রয়োজন অনুসারে ডাউনলোডের জীবনকাল নীতি আলাদাভাবে সেট করুন।
সফলভাবে ব্যবহারের পরে, চূড়ান্ত নাম প্রকাশের আগে অ্যাপ্লিকেশন যে আর্টিফ্যাক্ট আশা করে তা যাচাই করুন। বাধা ঘটলে, আংশিক ফাইলটি কেবল সচেতন পুনরায় শুরু করার নীতির অধীনে রাখুন, দূরবর্তী উপস্থাপনাকে চিহ্নিত করা মেটাডেটাসহ। খালি নয় এমন অস্থায়ী ফাইল সফল ডাউনলোড নয়।