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-ը։