IP и порт прокси: какой формат нужен приложению?
Преобразуйте запись из списка прокси в HTTP- или SOCKS-URL, заполните отдельные поля хоста и порта и правильно оформите IPv6-адреса.
Одни приложения ожидают IP:port, другим нужен URL, начинающийся с http:// или socks5://. В настройках браузера адрес и порт часто вводятся отдельно. Поэтому одна и та же конечная точка может иметь несколько форматов записи без изменения адреса.
Запись IPv4
Допустим, в списке HTTP-прокси указан пример HTTP-прокси 203.0.113.10:8080.
| Приложение запрашивает | Введите |
|---|---|
| Хост или IP | 203.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 не должен молча угадывать другой формат.