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은 일상적인 로그 밖에 두십시오.