Прокси шалгагчд дахь 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 өөрчлөлтийг тусгаарладаггүй.
Шалгалт нь өөр сүлжээний бодлого үлдээхгүйгээр ажиглалтаа буцаах ёстой. Түүний өөрийн клиент объект болон хязгаарлагдмал үйлдэл тэр хилийг тодорхой болгоно.