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 களை வழக்கமான பதிவுகளில் இருந்து விலக்கி வைக்கவும்.