Зачем автосмена
Если у вас скрипт или юзербот на Telethon, которому нужен прокси, — не зашивайте в код один сервер: публичный прокси умрёт через день-два. Надёжнее при старте брать свежий список из API каталога и подключаться к первому, который ответит.
Код
01
Поставьте зависимости
Telethon для клиента и httpx для запроса к API.
$
pip install telethon httpx
02
Возьмите список и подключитесь к первому живому
Прокси отсортированы по аптайму — сверху самые стабильные. Не ответил за 15 секунд — переходим к следующему.
$
import asyncio
import httpx
from telethon import TelegramClient
from telethon.network.connection.tcpmtproxy import ConnectionTcpMTProxyRandomizedIntermediate
API = "https://proxy-tlg.ru/search"
async def fetch_proxies(limit=10):
# EE-Mask не берём: fake-TLS Telethon не поддерживает
params = {"no_mask": "true", "dd_mask": "true", "sort": "uptime", "limit": limit}
async with httpx.AsyncClient(timeout=10) as http:
r = await http.get(API, params=params)
r.raise_for_status()
return r.json()["servers"]
async def connect_via_any_proxy(api_id, api_hash):
for s in await fetch_proxies():
client = TelegramClient(
"session", api_id, api_hash,
connection=ConnectionTcpMTProxyRandomizedIntermediate,
proxy=(s["ip"], s["port"], s["secret"]),
connection_retries=1,
)
try:
await asyncio.wait_for(client.connect(), timeout=15)
return client # подключились — работаем через этот прокси
except Exception:
await client.disconnect() # не ответил — пробуем следующий
raise RuntimeError("ни один прокси из списка не ответил")
Ограничения
- Только No-Mask и DD-Mask. Telethon не поддерживает fake-TLS, поэтому EE-Mask прокси в выборку не берём — они не подключатся.
- Кэшируйте список. Каталог перепроверяется раз в ~10 минут — запрашивать API чаще бессмысленно.
- Боты на Bot API (aiogram, python-telegram-bot) так не умеют — им нужен HTTP или SOCKS5, подробнее в статье «Прокси для Telegram-бота».
FAQ
Почему Telethon не подключается к EE-Mask прокси?
В Telethon нет поддержки fake-TLS, на котором построен EE-Mask. Берите No-Mask и DD-Mask — в примере фильтр уже выставлен.
Нужно ли убирать префикс dd из секрета?
Нет, передавайте секрет из API как есть — ConnectionTcpMTProxyRandomizedIntermediate работает и с DD, и с обычными секретами.
Как часто обновлять список прокси?
При старте и при потере соединения. Чаще раза в несколько минут смысла нет — каталог обновляется примерно раз в 10 минут.