Пераўтварэнне запісаў IPv4 ip:port:user:password для Requests
Разбірайце ip:port:user:password абмежаваным раздзяленнем і кадуйце часткі ўліковых даных перад пабудовай карты проксі.
Для фармату IPv4 ад пастаўшчыка HTTP-проксі 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 з уліковымі данымі па-за звычайнымі журналамі.