Одни приложения ожидают IP:port, другим нужен URL, начинающийся с http:// или socks5://. В настройках браузера адрес и порт часто вводятся отдельно. Поэтому одна и та же конечная точка может иметь несколько форматов записи без изменения адреса.

Запись IPv4

Допустим, в списке HTTP-прокси указан пример HTTP-прокси 203.0.113.10:8080.

Приложение запрашиваетВведите
Хост или IP203.0.113.10
Порт8080
URL HTTP-проксиhttp://203.0.113.10:8080

Не указывайте порт дважды. Если для порта уже есть отдельное поле, запись 203.0.113.10:8080 в поле хоста может заставить приложение разрешать всю строку как имя хоста. Аналогично, не добавляйте схему в поле, явно предназначенное только для IP-адреса.

Схема должна соответствовать сервису. Перед преобразованием адреса выберите HTTP или SOCKS5 с учётом поддержки клиента. Префикс socks5:// перед HTTP-точкой меняет то, что отправляет клиент, но не включает SOCKS5 на сервере.

IPv6 в URL требует квадратных скобок

Адрес IPv6 уже содержит двоеточия, поэтому в URL адрес заключают в квадратные скобки, а затем добавляют порт:

http://[2001:db8::10]:8080
socks5://[2001:db8::10]:1080

Без скобок граница между адресом и портом неоднозначна. В отдельных полях приложение обычно ожидает 2001:db8::10 как хост и 8080 как порт; следуйте его формату ввода. Оба адреса здесь — примеры для документации, а не работающие прокси.

Разбирайте URL, а не делите по каждому двоеточию

Небольшой скрипт Python может обрабатывать URL с IPv4 и IPv6 в скобках стандартным парсером URL:

from urllib.parse import urlsplit

proxy = urlsplit("http://[2001:db8::10]:8080")
print(proxy.scheme)
print(proxy.hostname)
print(proxy.port)

Свойство hostname возвращает адрес без скобок. Разделение исходной строки по каждому двоеточию испортило бы этот пример. В реальном импортёре также отклоняйте отсутствующие хосты, неподдерживаемые схемы и порты вне 1–65535. Разбор URL даёт его компоненты, но не доказывает существование сервиса.

Если список содержит имя пользователя и пароль

Распространённый формат URL — http://username:password@host:port. Символы @, # и / в учётных данных требуют правильного URL-кодирования. Если клиент предлагает отдельные поля учётных данных, обычно проще использовать их, чем собирать URL вручную.

Перед преобразованием строки учётных данных с разделителями-двоеточиями проверьте исходный формат поставщика. У четырёх разделённых двоеточиями полей нет универсального значения, а сам пароль может содержать двоеточие. Парсер простых строк IP:port не должен молча угадывать другой формат.

Похожие статьи