Зачем автосмена

Если у вас скрипт или юзербот на 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 минут.