Прокси не поддерживает нужный протокол: что делать
Вы настроили прокси, запустили скрипт — и получили ошибку «Protocol not supported» или «Connection refused». Проблема в несовместимости протоколов встречается чаще, чем кажется. Разберём, почему это происходит и как решить задачу без смены провайдера.
Какие протоколы используют прокси
Прежде чем решать проблему, важно понять разницу между протоколами. Каждый имеет свою область применения и ограничения.
| Протокол | Порты по умолчанию | Особенности |
|---|---|---|
| HTTP | 80, 8080, 3128 | Только HTTP-трафик, может модифицировать заголовки |
| HTTPS (CONNECT) | 443, 8443 | Туннелирование через HTTP CONNECT, шифрование |
| SOCKS4 | 1080 | TCP-соединения, без аутентификации, без UDP |
| SOCKS5 | 1080, 1081 | TCP и UDP, аутентификация, DNS через прокси |
Типичные конфликты:
- Selenium и Puppeteer требуют HTTP/HTTPS, а у вас SOCKS5
- Telegram-боты работают через SOCKS5, а прокси поддерживает только HTTP
- Торрент-клиенты требуют SOCKS5 с UDP, а прокси — SOCKS4
- Игровые приложения требуют UDP, а HTTP-прокси его не поддерживают
Диагностика: определяем протокол прокси
Если провайдер не указал протокол явно или вы сомневаетесь, проверьте прокси самостоятельно.
Проверка через curl
Тестируем HTTP-протокол:
# HTTP прокси
curl -x http://proxy_ip:port http://httpbin.org/ip
# С аутентификацией
curl -x http://user:pass@proxy_ip:port http://httpbin.org/ip
Тестируем SOCKS5:
# SOCKS5 прокси
curl -x socks5://proxy_ip:port http://httpbin.org/ip
# SOCKS5 с DNS через прокси (socks5h)
curl -x socks5h://proxy_ip:port http://httpbin.org/ip
Если команда возвращает IP-адрес прокси — протокол определён верно. Ошибка Connection refused или Unsupported proxy — протокол не тот.
Проверка через Python
import requests
proxy_ip = "proxy_ip:port"
# Тест HTTP
try:
r = requests.get("http://httpbin.org/ip",
proxies={"http": f"http://{proxy_ip}"},
timeout=10)
print(f"HTTP работает: {r.json()}")
except Exception as e:
print(f"HTTP не работает: {e}")
# Тест SOCKS5 (требуется pip install requests[socks])
try:
r = requests.get("http://httpbin.org/ip",
proxies={"http": f"socks5://{proxy_ip}"},
timeout=10)
print(f"SOCKS5 работает: {r.json()}")
except Exception as e:
print(f"SOCKS5 не работает: {e}")
Автоматическое определение
Скрипт для перебора протоколов:
import requests
def detect_protocol(proxy_address):
protocols = ["http", "https", "socks4", "socks5", "socks5h"]
for proto in protocols:
try:
proxies = {
"http": f"{proto}://{proxy_address}",
"https": f"{proto}://{proxy_address}"
}
r = requests.get("http://httpbin.org/ip",
proxies=proxies, timeout=5)
if r.status_code == 200:
return proto
except:
continue
return None
result = detect_protocol("proxy_ip:port")
print(f"Обнаружен протокол: {result}")
Конвертация HTTP в SOCKS и обратно
Если прокси поддерживает не тот протокол, который нужен вашему ПО, используйте локальный конвертер.
Privoxy: HTTP → SOCKS
Privoxy принимает HTTP-запросы и направляет их через SOCKS-прокси.
Установка:
# Ubuntu/Debian
sudo apt install privoxy
# macOS
brew install privoxy
# Windows — скачать с официального сайта
Настройка (файл /etc/privoxy/config):
# Слушаем на локальном порту 8118 (HTTP)
listen-address 127.0.0.1:8118
# Направляем через внешний SOCKS5
forward-socks5 / socks_proxy_ip:1080 .
# С аутентификацией
forward-socks5 / user:pass@socks_proxy_ip:1080 .
Теперь ваше ПО подключается к 127.0.0.1:8118 по HTTP, а трафик идёт через SOCKS5.
Gost: универсальный конвертер
Gost — мощный инструмент для любых преобразований протоколов.
# HTTP прокси на входе → SOCKS5 на выходе
gost -L http://:8080 -F socks5://socks_proxy_ip:1080
# SOCKS5 на входе → HTTP на выходе
gost -L socks5://:1080 -F http://http_proxy_ip:8080
# С аутентификацией на обоих концах
gost -L http://local_user:local_pass@:8080 \
-F socks5://remote_user:remote_pass@proxy_ip:1080
Конвертер на Python
Минималистичный конвертер для простых задач:
# pip install pproxy
# HTTP на входе, SOCKS5 на выходе
pproxy -l http://:8080 -r socks5://proxy_ip:1080
# SOCKS5 на входе, HTTP на выходе
pproxy -l socks5://:1080 -r http://proxy_ip:8080
Настройка локальных туннелей
Иногда конвертации недостаточно — нужен полноценный туннель.
SSH-туннель через HTTP-прокси
Если у вас есть SSH-сервер и HTTP-прокси, можно создать SOCKS5:
# Создаём SOCKS5 на localhost:1080 через HTTP-прокси
ssh -D 1080 -o ProxyCommand="nc -X connect -x http_proxy:8080 %h %p" user@ssh_server
Stunnel для HTTPS
Если нужен HTTPS-прокси, а есть только HTTP:
# stunnel.conf
[https-proxy]
client = yes
accept = 127.0.0.1:8443
connect = http_proxy_ip:8080
protocol = connect
protocolHost = target_host:443
Настройка ПО под доступный протокол
Иногда проще настроить ПО под имеющийся протокол, чем конвертировать.
Selenium с разными протоколами
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# HTTP прокси (стандартный способ)
options = Options()
options.add_argument('--proxy-server=http://proxy_ip:8080')
# SOCKS5 прокси
options.add_argument('--proxy-server=socks5://proxy_ip:1080')
# Для Firefox с SOCKS5
from selenium.webdriver.firefox.options import Options as FirefoxOptions
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.socks", "proxy_ip")
profile.set_preference("network.proxy.socks_port", 1080)
profile.set_preference("network.proxy.socks_version", 5)
aiohttp с SOCKS
# pip install aiohttp-socks
import aiohttp
from aiohttp_socks import ProxyConnector
async def fetch_with_socks():
connector = ProxyConnector.from_url('socks5://proxy_ip:1080')
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get('http://httpbin.org/ip') as response:
return await response.json()
Telegram-боты через HTTP
Если Telegram-библиотека требует SOCKS5, но у вас HTTP:
# python-telegram-bot с HTTP прокси
from telegram.ext import ApplicationBuilder
application = (
ApplicationBuilder()
.token("YOUR_TOKEN")
.proxy_url("http://proxy_ip:8080") # Работает с HTTP
.build()
)
Совет: Многие современные библиотеки поддерживают оба протокола. Проверьте документацию — возможно, достаточно изменить URL-схему с
socks5://наhttp://.
Как выбрать прокси с нужным протоколом
Чтобы избежать проблем с протоколами, определите требования заранее.
Матрица совместимости
| Задача | Рекомендуемый протокол | Почему |
|---|---|---|
| Веб-скрапинг | HTTP/HTTPS | Широкая поддержка, простая настройка |
| Браузерная автоматизация | HTTP или SOCKS5 | Зависит от браузера и фреймворка |
| Telegram, Discord боты | SOCKS5 | Требования библиотек |
| Торренты | SOCKS5 с UDP | DHT и PEX используют UDP |
| Игры, VoIP | SOCKS5 с UDP | Низкая задержка, UDP-трафик |
| API-запросы | HTTP/HTTPS | REST API работает через HTTP |
На что смотреть при выборе провайдера
- Список поддерживаемых протоколов — должен быть явно указан
- Возможность переключения — некоторые провайдеры дают доступ к одному IP через разные порты/протоколы
- UDP-поддержка для SOCKS5 — не все SOCKS5-прокси поддерживают UDP
- Документация по настройке — примеры для разных языков и инструментов
Резидентные прокси обычно поддерживают HTTP/HTTPS и SOCKS5 одновременно, что снимает большинство проблем совместимости. Датацентр-прокси чаще ограничены HTTP/HTTPS.
Чек-лист перед покупкой
- Определите, какой протокол требует ваше ПО
- Проверьте, нужен ли UDP (игры, торренты, VoIP)
- Уточните у провайдера поддержку нужного протокола
- Запросите тестовый доступ для проверки совместимости
- Подготовьте план Б — локальный конвертер
Заключение
Несовместимость протоколов — решаемая проблема. В большинстве случаев достаточно локального конвертера вроде Privoxy или Gost. Для долгосрочных проектов выгоднее сразу выбрать прокси с поддержкой нужного протокола.
Для задач, требующих гибкости в выборе протокола, подойдут резидентные прокси с мультипротокольным доступом — подробнее на proxycove.com.