Requests-നായി IPv4 ip:port:user:password എൻട്രികൾ പരിവർത്തനം ചെയ്യുക
ip:port:user:password പരിമിതമായ വിഭജനത്തോടെ വേർതിരിച്ച്, പ്രോക്സി മാപ്പ് നിർമ്മിക്കുന്നതിന് മുമ്പ് ക്രെഡൻഷ്യൽ ഭാഗങ്ങൾ എൻകോഡ് ചെയ്യുക.
HTTP പ്രോക്സി ദാതാവിന്റെ IPv4 ഫോർമാറ്റ് ip:port:user:password ആണെങ്കിൽ, മൂല്യം Requests-ന് നൽകുന്നതിന് മുമ്പ് ഫീൽഡുകൾ പരിവർത്തനം ചെയ്യുക:
from ipaddress import IPv4Address
from urllib.parse import quote
def proxy_map(line):
host, port, user, password = line.rstrip('\r\n').split(':', 3)
host = str(IPv4Address(host))
port = int(port)
if not 1 <= port <= 65535:
raise ValueError('Proxy port is out of range')
credentials = quote(user, safe='') + ':' + quote(password, safe='')
url = f'http://{credentials}@{host}:{port}'
return {'http': url, 'https': url}
പരിമിതമായ വിഭജനം പാസ്വേഡിലെ അധിക കോളനുകൾ നിലനിർത്തുന്നു. ലൈൻ അവസാനങ്ങൾ മാത്രം നീക്കം ചെയ്യുന്നത് ക്രെഡൻഷ്യലിന്റെ ഭാഗമായേക്കാവുന്ന സ്പെയ്സുകൾ നിശ്ശബ്ദമായി നീക്കം ചെയ്യുന്നത് ഒഴിവാക്കുന്നു.
ഉപയോക്തൃനാമവും പാസ്വേഡും വെവ്വേറെ URL ഘടകങ്ങളായി എൻകോഡ് ചെയ്യുക. അസംസ്കൃത പാസ്വേഡിലെ @ ചിഹ്നം പ്രോക്സി ഹോസ്റ്റിന് മുമ്പുള്ള വിഭജകവുമായി തെറ്റിദ്ധരിക്കരുത്. ഈ ഫംഗ്ഷൻ അസംസ്കൃത ക്രെഡൻഷ്യലുകൾ പ്രതീക്ഷിക്കുന്നു; ഇതിനകം എൻകോഡ് ചെയ്ത ടെക്സ്റ്റ് നൽകിയാൽ ശതമാന ചിഹ്നം വീണ്ടും എൻകോഡ് ചെയ്യപ്പെടാം.
തിരികെ നൽകുന്ന മാപ്പ് HTTP, HTTPS ലക്ഷ്യങ്ങൾക്ക് ഈ പ്രോക്സി തിരഞ്ഞെടുക്കുന്നു. http://192.0.2.10 പോലുള്ള ഒരു കീയ്ക്ക് Requests-ൽ മറ്റൊരു അർത്ഥമുണ്ട്: അത് ആ ലക്ഷ്യ ഹോസ്റ്റിനുള്ള റൂട്ട് തിരഞ്ഞെടുക്കുന്നു. ഇത് പ്രോക്സി സെർവറുകളുടെ കൂട്ടത്തിനുള്ള സൂചികയല്ല.
പാർസർ മനഃപൂർവ്വം പറഞ്ഞ IPv4 ഫോർമാറ്റ് സ്വീകരിക്കുന്നു. കോളൺ ഉള്ള ഉപയോക്തൃനാമങ്ങളോ ബ്രാക്കറ്റില്ലാത്ത IPv6 വിലാസങ്ങളോ ഇതിൽ ഉൾപ്പെടുന്നില്ല; അവയ്ക്ക് അവ്യക്തതയില്ലാത്ത ഇൻപുട്ട് ഫോർമാറ്റ് ആവശ്യമാണ്. ക്രെഡൻഷ്യലുകൾ അടങ്ങിയ URL-കൾ സാധാരണ ലോഗുകളിൽ നിന്ന് ഒഴിവാക്കുക.