ప్రాక్సీ చెకర్లలో గ్లోబల్ 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 ఆ ఉద్దేశిత క్లయింట్కు జోడించి ఉంచండి.
urllib.request.install_opener() తర్వాతి module-స్థాయి urlopen() కాల్స్ ఉపయోగించే ప్రక్రియ-వ్యాప్త డిఫాల్ట్ను మారుస్తుంది. అందువల్ల ప్రాక్సీల గుండా తిరిగే చెకర్ సంబంధం లేని అభ్యర్థనలను తన చివరి ఎండ్పాయింట్ వద్ద వదిలివేయవచ్చు. తాత్కాలికంగా ఇన్స్టాల్ చేసి శుభ్రపరిచేటప్పుడు పునరుద్ధరించడం ఇప్పటికీ ఏకకాల అభ్యర్థనలు పంచుకున్న మార్పు సమయంలో నడవడానికి అనుమతిస్తుంది.
socket.setdefaulttimeout() అదేవిధంగా తర్వాత సృష్టించే socket ల కోసం డిఫాల్ట్లను మారుస్తుంది. తనిఖీ మాత్రమే దాన్ని పొందాల్సినప్పుడు ఆపరేషన్-స్థాయి టైమ్అవుట్ను ఉపయోగించండి.
తనిఖీ ప్రతిస్పందనలను మూసివేయండి మరియు ఫలితాలను నిర్దిష్టంగా ఉంచండి: HTTP లోప ప్రతిస్పందన స్వయంచాలకంగా చనిపోయిన ప్రాక్సీ శ్రోత కాదు. async సేవలో synchronous urllib తనిఖీ ఉపయోగించబడితే, నిరోధించే పనిని సరైన worker కి తరలించండి; ఆ అమలు నిర్ణయం గ్లోబల్ opener మార్పును వేరుచేయదు.
తనిఖీ మరో నెట్వర్క్ విధానాన్ని వెనుక వదలకుండా తన పరిశీలనను తిరిగి ఇవ్వాలి. దాని స్వంత క్లయింట్ ఆబ్జెక్ట్ మరియు పరిమిత ఆపరేషన్ ఆ హద్దును స్పష్టం చేస్తాయి.