Python urllib: ਪ੍ਰੌਕਸੀ ਰਾਊਟਿੰਗ ਨੂੰ ਵੈੱਬਸਾਈਟ 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() ਨੂੰ ਸਿੱਧਾ ਕਾਲ ਕਰਨ ਨਾਲ ਕਨਫ਼ਿਗਰੇਸ਼ਨ ਕਾਰਵਾਈ ਨਾਲ ਰਹਿੰਦੀ ਹੈ। module-ਪੱਧਰੀ ਡਿਫ਼ਾਲਟ ਬਦਲਣ ਦੀ ਲੋੜ ਨਹੀਂ, ਜਦੋਂ ਤੱਕ ਐਪਲੀਕੇਸ਼ਨ ਜਾਣਬੁੱਝ ਕੇ ਨਹੀਂ ਚਾਹੁੰਦੀ ਕਿ ਸਾਰੀਆਂ ਸੁਵਿਧਾਜਨਕ ਕਾਲਾਂ ਇਹ opener ਸਾਂਝਾ ਕਰਨ।