Преобразуване на 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 адреси с идентификационни данни далеч от обичайните журнали.