Прокси тексерушілерде 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() кейінгі модуль деңгейіндегі urlopen() шақырулары қолданатын процесс бойынша әдепкі мәнді өзгертеді. Сондықтан проксилерді аралайтын тексеруші байланыссыз сұраныстарды өзінің соңғы соңғы нүктесінде қалдыруы мүмкін. Уақытша орнатып, тазалау кезінде қалпына келтіру ортақ өзгеріс кезінде параллель сұраныстардың жұмысына әлі де жол береді.
socket.setdefaulttimeout() сол сияқты кейін жасалатын socket-тердің әдепкі мәндерін өзгертеді. Оны тек тексеру алуы керек болғанда операция деңгейіндегі тайм-аутты қолданыңыз.
Тексеру жауаптарын жабыңыз және нәтижелерін нақты ұстаңыз: HTTP қате жауабы автоматты түрде өлі прокси тыңдаушысы емес. Егер синхронды urllib тексеруі асинхронды қызметте қолданылса, блоктайтын жұмысты тиісті worker-ге көшіріңіз; бұл орындалу шешімі ғаламдық opener өзгерісін оқшауланған етпейді.
Тексеру басқа желілік саясатты қалдырмай өз бақылауын қайтаруы керек. Оның өз клиент нысаны және шектеулі операциясы сол шекараны айқын етеді.