Python urllib: პროქსების გამორთვა ერთი opener-ისთვის
ProxyHandler({})-ით შექმენით პირდაპირ დაკავშირებული urllib opener სხვა კლიენტებისა და პროცესის გარემოს შეცვლის გარეშე.
ProxyHandler-ს ცარიელი ასახვა გადაეცით, როცა ერთი urllib opener პირდაპირ უნდა უკავშირდებოდეს:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
ცარიელი ლექსიკონი პროქსის მარშრუტებს არ იძლევა. ასახვის გამოტოვებისას კი დამმუშავებელი პროქსებს გარემოდან და პლატფორმის პარამეტრებიდან აღმოაჩენს. შექმნის ეს ორი გზა განსხვავებულ პოლიტიკას გამოხატავს.
მაგალითი Python-ის სტანდარტულ ბიბლიოთეკას იყენებს და ჩვეულებრივ HTTPS შემოწმებას ინარჩუნებს. with ბლოკი პასუხს ხურავს, მაშინაც, როცა გამონაკლისი ბლოკიდან გამოსვლას იწვევს.
პირდაპირი და პროქსით გაგზავნილი მოთხოვნები ერთ აპლიკაციაში
ორმა opener-მა შეიძლება ორი პოლიტიკა შეინარჩუნოს გამოძახებებს შორის გარემოს ცვლადების შეცვლის გარეშე:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}))
with proxied.open("https://example.com/", timeout=10) as response:
print(response.status)
უკუმარყუჟის მისამართი თქვენი HTTP პროქსით შეცვალეთ ან პროქსით შედარებისთვის კანდიდატი HTTP პროქსების სიიდან აირჩიეთ. მას შეუძლია HTTPS სამიზნის კავშირი CONNECT-ით გადაიტანოს, თუ სერვისი ამის უფლებას იძლევა. მსმენელის პროტოკოლი და ავთენტიკაციის მხარდაჭერა დამმუშავებელს უნდა შეესაბამებოდეს.
ნაგულისხმევი opener უცვლელი დატოვეთ
direct.open ან proxied.open მარშრუტზე პასუხისმგებელი ობიექტით გამოიძახეთ. install_opener ცვლის პროცესის საერთო ნაგულისხმევ ობიექტს, რომელსაც urllib-ის დამხმარე ფუნქციები იყენებს; ამიტომ მისმა გამომყენებელმა ბიბლიოთეკამ შეიძლება დაუკავშირებელ კოდზე იმოქმედოს. ზემოთ მოცემული იზოლირებული opener-ისთვის ის საჭირო არ არის.
timeout არგუმენტი ოპერაციის პარამეტრია და არა თითოეული გადაცემის სრული რეალური დროის ზღვარი. წაიკითხეთ მხოლოდ საჭირო მონაცემები და გამოიყენეთ უფრო მაღალი დონის ვადა, თუ სამუშაოს მკაცრი საერთო დროის ბიუჯეტი აქვს.
ეს opener ობიექტები არ ცვლის სხვა ბიბლიოთეკის კლიენტს, არსებულ პროცესს ან ბრაუზერის პროქსი პარამეტრებს.