Python urllib: proxy-ის მარშრუტიზაციის შერწყმა საიტის Basic Authentication-თან
შეაერთეთ urllib-ის მარშრუტიზაცია და დანიშნულების Basic authentication ერთ ცხად opener-ში გლობალური opener-ის ორჯერ შეცვლის გარეშე.
install_opener() ორჯერ გამოძახება მეორე opener-ს პირველს არ უმატებს. ის ცვლის მოდულის ნაგულისხმევ opener-ს. თუ ერთმა ობიექტმა იცის proxy, ხოლო მეორმა — საიტზე შესვლა, შექმენით ერთი opener საჭირო handler-ებით.
import os
from urllib.request import (ProxyHandler, HTTPBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener)
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(None, 'https://example.com/private/',
os.environ['SITE_USER'], os.environ['SITE_PASSWORD'])
opener = build_opener(
ProxyHandler({'https': 'http://203.0.113.10:8080'}),
HTTPBasicAuthHandler(passwords),
)
with opener.open('https://example.com/private/report', timeout=10) as response:
body = response.read()Proxy და დანიშნულება მაგალითებია. საჯარო სერვისისთვის, რომელიც ხელმისაწვდომია საჯარო HTTP proxy-ს მეშვეობით, HTTP proxy-ების სია გთავაზობთ კანდიდატ endpoint-ებს მარშრუტიზაციის handler-ისთვის. ეს opener HTTPS მოთხოვნას HTTP proxy-ს მეშვეობით გზავნის და ამუშავებს დანიშნულების Basic გამოწვევას. ის არ აკონფიგურირებს proxy-ს ავთენტიფიკაციას.
თუ proxy-საც სჭირდება შესვლა, ცალკე აირჩიეთ მხარდაჭერილი proxy-ავთენტიფიკაციის სქემა. 407 CONNECT-ის დროს ხდება მანამ, სანამ დანიშნულება გამოსცემს საკუთარ გამოწვევას. საიტის მონაცემების პაროლების მენეჯერში დამატება ვერ დააკმაყოფილებს იმ ადრინდელ გაცვლას.
opener.open() პირდაპირი გამოძახება ინარჩუნებს კონფიგურაციას ოპერაციასთან ერთად. არ არის საჭირო მოდულის დონის ნაგულისხმევის შეცვლა, თუ აპლიკაცია განზრახ არ ისურვებს, რომ ყველა მოხერხებულმა გამოძახებამ გაიზიაროს ეს opener.