მოერიდეთ urllib opener-ის გლობალურ ცვლილებებს proxy შემმოწმებლებში
შეინახეთ urllib proxy შემოწმებები მათივე 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 proxy სიიდან. ფრაგმენტი აჩვენებს მფლობელობას; ის არ განსაზღვრავს სრულ ავთენტიფიკაციის ან ჯანმრთელობის პოლიტიკას. ანგარიშის სპეციფიკური ნებისმიერი handler მიბმული შეინახეთ განზრახ კლიენტთან.
urllib.request.install_opener() ცვლის პროცესის მასშტაბის ნაგულისხმევს, რომელსაც იყენებენ მოგვიანებით მოდულის დონის urlopen() გამოძახებები. ამიტომ proxy-ებზე მოძრავი შემმოწმებელი შეიძლება დატოვოს დაუკავშირებელი მოთხოვნები მის ბოლო ბოლო წერტილზე. დროებით დაყენება და გასუფთავებისას აღდგენა მაინც საშუალებას აძლევს პარალელურ მოთხოვნებს იმუშაონ საერთო ცვლილების დროს.
socket.setdefaulttimeout() ანალოგიურად ცვლის მოგვიანებით შექმნილი socket-ების ნაგულისხმევებს. გამოიყენეთ ოპერაციის დონის ტაიმაუტი, როცა მხოლოდ შემოწმებამ უნდა მიიღოს ის.
დახურეთ შემოწმების პასუხები და შეინახეთ შედეგები კონკრეტულად: HTTP შეცდომის პასუხი ავტომატურად არ არის მკვდარი proxy მსმენელი. თუ სინქრონული urllib შემოწმება გამოიყენება ასინქრონულ სერვისში, გადაიტანეთ ბლოკირებადი სამუშაო შესაბამის worker-ზე; ეს შესრულების გადაწყვეტილება გლობალურ opener ცვლილებას იზოლირებულს არ ხდის.
შემოწმებამ უნდა დააბრუნოს თავისი დაკვირვება სხვა ქსელური პოლიტიკის დატოვების გარეშე. მისი საკუთარი კლიენტის ობიექტი და შეზღუდული ოპერაცია ამ საზღვარს ცხადს ხდის.