Python urllib: proxy రూటింగ్ను వెబ్సైట్ Basic Authentication తో కలపడం
గ్లోబల్ opener ను రెండుసార్లు భర్తీ చేయకుండా urllib రూటింగ్ మరియు గమ్యం యొక్క Basic authentication ను ఒకే స్పష్టమైన opener లో కలపండి.
install_opener() ను రెండుసార్లు కాల్ చేయడం రెండవ opener ను మొదటిదానికి జోడించదు. ఇది module యొక్క డిఫాల్ట్ opener ను భర్తీ చేస్తుంది. ఒక వస్తువు proxy ను, మరొకటి వెబ్సైట్ లాగిన్ ను తెలిస్తే, అవసరమైన handlers తో ఒకే opener ను నిర్మించండి.
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 జాబితా రూటింగ్ handler కోసం అభ్యర్థి endpoints అందిస్తుంది. ఈ opener HTTPS అభ్యర్థనను HTTP proxy ద్వారా పంపి గమ్యం యొక్క Basic సవాలును నిర్వహిస్తుంది. ఇది proxy ప్రామాణీకరణను కాన్ఫిగర్ చేయదు.
proxy కూడా లాగిన్ అవసరమైతే, మద్దతు ఉన్న proxy-ప్రామాణీకరణ అమరికను విడిగా ఎంచుకోండి. CONNECT సమయంలో 407 గమ్యం తన స్వంత సవాలును జారీ చేయడానికి ముందే సంభవిస్తుంది. పాస్వర్డ్ మేనేజర్కు వెబ్సైట్ ఆధారాలను జోడించడం ఆ మునుపటి మార్పిడిని తీర్చలేదు.
opener.open() ను నేరుగా కాల్ చేయడం కాన్ఫిగరేషన్ను ఆపరేషన్తో ఉంచుతుంది. యాప్లికేషన్ అన్ని సౌకర్యవంతమైన కాల్లు ఈ opener ను పంచుకోవాలని ఉద్దేశపూర్వకంగా కోరుకోకపోతే, module-వ్యాప్త డిఫాల్ట్ను మార్చాల్సిన అవసరం లేదు.