Python urllib: HTTP അഭ്യർത്ഥനകൾക്കുള്ള Basic പ്രോക്സി പ്രമാണീകരണം
Basic HTTP പ്രോക്സി വെല്ലുവിളിക്ക് വ്യക്തമായ urllib opener നിർമ്മിക്കുക, കൂടാതെ ഈ സാധാരണ HTTP കൈമാറ്റത്തെ HTTPS CONNECT പ്രമാണീകരണത്തിൽ നിന്ന് വേർതിരിക്കുക.
HTTP പ്രോക്സിയിൽ നിന്നുള്ള Basic വെല്ലുവിളിക്ക് ProxyBasicAuthHandler ഉപയോഗിക്കുക. ഈ സാധാരണ HTTP ഉദാഹരണം പാതയും അക്കൗണ്ടും ഒരേ opener-ൽ സൂക്ഷിക്കുന്നു:
import os
from urllib.request import (
ProxyHandler, ProxyBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener,
)
proxy_url = 'http://proxy.example:8080'
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(
None, proxy_url,
os.environ['PROXY_USER'], os.environ['PROXY_PASSWORD'],
)
opener = build_opener(
ProxyHandler({'http': proxy_url}),
ProxyBasicAuthHandler(passwords),
)
with opener.open('http://example.com/', timeout=10) as response:
print(response.status)യഥാർത്ഥ എൻഡ്പോയിന്റും ഓപ്പറേറ്റർ നൽകുന്ന അക്കൗണ്ടും ഉപയോഗിക്കുക. ഈ ഹാൻഡ്ലർ പ്രോക്സിയുടെ വെല്ലുവിളിക്ക് പാസ്വേഡ് മാനേജർ ഉപയോഗിക്കുന്നു; ഉദ്ദേശിച്ച പ്രോക്സി URI-യും realm-ഉം പൊരുത്തപ്പെടുത്തുക. ലക്ഷ്യത്തിലെ Basic പ്രമാണീകരണം മറ്റൊരു ഹാൻഡ്ലർ ഉപയോഗിക്കുന്നു.
opener നേരിട്ട് വിളിക്കുന്നത് ഈ ക്രമീകരണം പ്രാദേശികമായി നിർത്തുന്നു. അഭ്യർത്ഥനയുടെ URL ഇടനിലക്കാരനല്ല, വെബ്സൈറ്റ് തന്നെ തുടരുന്നു. ഈ വ്യക്തമായ HTTP പാത Basic കൈമാറ്റം എൻക്രിപ്റ്റ് ചെയ്യുന്നില്ല.
ഈ ഉദാഹരണത്തിൽ നിന്ന് HTTPS ടണൽ പിന്തുണ അനുമാനിക്കരുത്. CONNECT സമയത്ത് 407 ക്രമീകരണത്തിൽ, സാധാരണ ലക്ഷ്യ പ്രതികരണത്തിന് മുമ്പ് സംഭവിക്കുന്നു; തിരഞ്ഞെടുത്ത സംയോജനം അവിടെ പ്രമാണീകരണം കൈകാര്യം ചെയ്യണം. വെബ്സൈറ്റിന്റെ ലോഗിൻ ഹാൻഡ്ലർ മാറ്റുന്നത് ആ മുൻ വെല്ലുവിളി പരിഹരിക്കാൻ കഴിയില്ല.
ക്രെഡൻഷ്യലുകൾ വഹിക്കുന്ന പ്രോക്സി URL-കൾ പഴയ ഉദാഹരണങ്ങളിൽ കാണുന്ന മറ്റൊരു ഫോർമാറ്റാണ്. ഉപയോഗിക്കുകയാണെങ്കിൽ URL വിഭജനങ്ങൾ ശരിയായി എൻകോഡ് ചെയ്യുക, ഉണ്ടാകുന്ന രഹസ്യ URL ലോഗുകൾക്ക് പുറത്ത് നിർത്തുക.