প্রক্সি পরীক্ষকে global urllib opener পরিবর্তন এড়িয়ে চলুন
প্রসেস-ব্যাপী রাউটিং ও টাইমআউট ডিফল্ট বদলের বদলে urllib প্রক্সি পরীক্ষা তার নিজের opener-এ সীমাবদ্ধ রাখুন।
from urllib.request import ProxyHandler, build_opener
def make_proxy_opener(proxy_uri):
return build_opener(ProxyHandler({
"http": proxy_uri,
"https": proxy_uri,
}))
opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.কোনো রুট পরীক্ষার হলে এই opener-এর নিজস্ব open পদ্ধতি ডাকুন। উদাহরণের HTTP এন্ডপয়েন্ট আপনার সেবা থেকে বা প্রকাশ্য পরীক্ষার জন্য HTTP প্রক্সি তালিকা থেকে আসতে পারে। অংশটি মালিকানা দেখায়; এটি সম্পূর্ণ প্রমাণীকরণ বা স্বাস্থ্য নীতি নির্ধারণ করে না। অ্যাকাউন্ট-নির্দিষ্ট যেকোনো handler সেই উদ্দিষ্ট client-এ সংযুক্ত রাখুন।
urllib.request.install_opener() প্রসেস-ব্যাপী ডিফল্ট বদলায় যা পরবর্তী module-স্তরের urlopen() কল ব্যবহার করে। তাই প্রক্সি ঘুরে দেখা পরীক্ষক অসংশ্লিষ্ট অনুরোধগুলোকে তার শেষ এন্ডপয়েন্ট ব্যবহার করতে রেখে যেতে পারে। সাময়িকভাবে ইনস্টল করে পরিষ্কারের সময় ফিরিয়ে দিলেও ভাগ করা পরিবর্তনের সময় সমবর্তী অনুরোধ চলতে দেয়।
socket.setdefaulttimeout() একইভাবে পরে তৈরি socket-এর ডিফল্ট বদলায়। যখন কেবল পরীক্ষাই এটি পাবে তখন অপারেশন-স্তরের timeout ব্যবহার করুন।
পরীক্ষার প্রতিক্রিয়া বন্ধ করুন এবং ফলাফল নির্দিষ্ট রাখুন: HTTP ত্রুটি প্রতিক্রিয়া স্বয়ংক্রিয়ভাবে মৃত প্রক্সি শ্রোতা নয়। যদি async সেবায় synchronous urllib পরীক্ষা ব্যবহার হয়, তবে বাধাদানকারী কাজ উপযুক্ত worker-এ সরান; সেই কার্যকর সিদ্ধান্ত global opener পরিবর্তনকে বিচ্ছিন্ন করে না।
একটি পরীক্ষা আরেকটি নেটওয়ার্ক নীতি রেখে না গিয়ে তার পর্যবেক্ষণ ফিরিয়ে দেওয়া উচিত। এর নিজস্ব client object ও সীমিত অপারেশন সেই সীমা স্পষ্ট করে।