Files
9may/test_socks5_longpolling.py
T
2026-05-03 23:33:47 +03:00

247 lines
10 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Тестирование long polling через SOCKS5 прокси
Проверяет, может ли прокси поддерживать длительные соединения
"""
import asyncio
import aiohttp
import sys
import logging
from datetime import datetime
# Настройка логирования
logging.basicConfig(
format='%(asctime)s - %(levelname)s - %(message)s',
level=logging.INFO
)
logger = logging.getLogger(__name__)
# Конфигурация прокси
PROXY_URL = "socks5://FYqj9n:n4br4L@185.168.251.163:8000"
TELEGRAM_BOT_TOKEN = "8460953229:AAFZ_1iYLsCTRWR-glNumHxoHXMxTe2-A84"
async def test_socks5_connection():
"""Тест базового подключения через SOCKS5"""
print("\n" + "=" * 60)
print("ТЕСТ 1: Базовое подключение через SOCKS5")
print("=" * 60)
try:
from aiohttp_socks import ProxyConnector
# Парсим прокси
import re
match = re.search(r'socks5://([^:]+):([^@]+)@([^:]+):(\d+)', PROXY_URL)
if match:
username = match.group(1)
password = match.group(2)
host = match.group(3)
port = int(match.group(4))
connector = ProxyConnector.from_url(f"socks5://{username}:{password}@{host}:{port}")
logger.info(f"✅ SOCKS5 прокси настроен: {host}:{port}")
else:
logger.error("❌ Не удалось распарсить прокси URL")
return False
async with aiohttp.ClientSession(connector=connector) as session:
# Тест 1: Проверка IP через прокси
async with session.get("https://api.ipify.org?format=json", timeout=10) as resp:
data = await resp.json()
logger.info(f"✅ IP через прокси: {data.get('ip')}")
# Тест 2: Проверка подключения к Telegram API
url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getMe"
async with session.get(url, timeout=10) as resp:
if resp.status == 200:
data = await resp.json()
if data.get('ok'):
logger.info(f"✅ Подключение к Telegram работает! Бот: @{data['result']['username']}")
return True
else:
logger.error(f"❌ Ошибка API: {data}")
return False
else:
logger.error(f"❌ HTTP {resp.status}")
return False
except ImportError:
logger.error("❌ Установите aiohttp-socks: pip install aiohttp-socks")
return False
except Exception as e:
logger.error(f"❌ Ошибка: {e}")
return False
async def test_long_polling():
"""Тест long polling через SOCKS5"""
print("\n" + "=" * 60)
print("ТЕСТ 2: Long polling через SOCKS5")
print("=" * 60)
print("⚠️ Этот тест будет ждать 30 секунд...")
print(" Отправьте команду /test боту в Telegram в течение 30 секунд\n")
try:
from aiohttp_socks import ProxyConnector
import re
match = re.search(r'socks5://([^:]+):([^@]+)@([^:]+):(\d+)', PROXY_URL)
if not match:
logger.error("❌ Не удалось распарсить прокси")
return False
username = match.group(1)
password = match.group(2)
host = match.group(3)
port = int(match.group(4))
connector = ProxyConnector.from_url(f"socks5://{username}:{password}@{host}:{port}")
async with aiohttp.ClientSession(connector=connector) as session:
# Получаем последнее обновление
get_updates_url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates"
# Сначала сбрасываем offset
async with session.get(f"{get_updates_url}?offset=-1", timeout=10) as resp:
await resp.json()
# Тестируем long polling с timeout=30 секунд
start_time = datetime.now()
logger.info("🔄 Начинаем long polling (ожидание 30 секунд)...")
async with session.get(f"{get_updates_url}?timeout=30&offset=-1", timeout=35) as resp:
if resp.status == 200:
data = await resp.json()
elapsed = (datetime.now() - start_time).total_seconds()
if data.get('result'):
logger.info(f"✅ Получено сообщение через {elapsed:.1f} секунд!")
logger.info(f"📨 Сообщение: {data['result'][0].get('message', {}).get('text')}")
return True
else:
logger.warning(f"⚠️ Long polling завершился через {elapsed:.1f} секунд без сообщений")
logger.warning(" Прокси работает, но сообщений не было получено")
return True # Это НЕ ошибка, просто не было сообщений
else:
logger.error(f"❌ Ошибка HTTP {resp.status}")
return False
except asyncio.TimeoutError:
logger.error("❌ Таймаут long polling!")
logger.error(" Прокси НЕ поддерживает длительные соединения")
return False
except Exception as e:
logger.error(f"❌ Ошибка: {e}")
return False
async def test_alternative_methods():
"""Тест альтернативных методов (телеграф, вебхук)"""
print("\n" + "=" * 60)
print("ТЕСТ 3: Альтернативные методы")
print("=" * 60)
try:
from aiohttp_socks import ProxyConnector
import re
match = re.search(r'socks5://([^:]+):([^@]+)@([^:]+):(\d+)', PROXY_URL)
if not match:
return False
username = match.group(1)
password = match.group(2)
host = match.group(3)
port = int(match.group(4))
connector = ProxyConnector.from_url(f"socks5://{username}:{password}@{host}:{port}")
async with aiohttp.ClientSession(connector=connector) as session:
# Тест: Проверка скорости ответа
urls = [
("Telegram API (getMe)", f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getMe"),
("Google", "https://google.com"),
("Cloudflare", "https://cloudflare.com"),
]
for name, url in urls:
try:
start = datetime.now()
async with session.get(url, timeout=10) as resp:
elapsed = (datetime.now() - start).total_seconds()
if resp.status == 200:
logger.info(f"{name}: {elapsed:.2f} сек (статус {resp.status})")
else:
logger.warning(f"⚠️ {name}: {elapsed:.2f} сек (статус {resp.status})")
except Exception as e:
logger.error(f"{name}: ошибка - {e}")
return True
except Exception as e:
logger.error(f"❌ Ошибка: {e}")
return False
async def main():
"""Главная функция"""
print("\n" + "=" * 60)
print("🧪 ТЕСТИРОВАНИЕ SOCKS5 ПРОКСИ ДЛЯ LONG POLLING")
print("=" * 60)
print(f"\n📡 Прокси: {PROXY_URL.split('@')[-1] if '@' in PROXY_URL else PROXY_URL}")
print(f"🤖 Бот: @ten_may_bot")
# Тест 1: Базовое подключение
basic_ok = await test_socks5_connection()
if not basic_ok:
print("\n❌ Базовое подключение не работает!")
print("Проверьте настройки прокси")
return
# Тест 2: Long polling
long_polling_ok = await test_long_polling()
# Тест 3: Альтернативные методы
await test_alternative_methods()
# Итоги
print("\n" + "=" * 60)
print("📊 РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ")
print("=" * 60)
if long_polling_ok:
print("\n✅ SOCKS5 прокси ПОДДЕРЖИВАЕТ long polling!")
print(" Бот должен работать нормально.")
print("\n💡 Запустите бота:")
print(" python bot.py")
else:
print("\n❌ SOCKS5 прокси НЕ ПОДДЕРЖИВАЕТ long polling!")
print("\n⚠️ Это означает, что вы НЕ сможете получать обновления")
print(" через этот прокси в реальном времени.")
print("\n📌 Рекомендации:")
print(" 1. Используйте VPN вместо прокси")
print(" 2. Найдите другой прокси, который поддерживает длительные соединения")
print(" 3. Настройте свой собственный прокси (например, 3proxy)")
print(" 4. Используйте webhook (требуется HTTPS сервер)")
print("\n" + "=" * 60)
if __name__ == "__main__":
# Установка зависимостей если нет
try:
import aiohttp_socks
except ImportError:
print("Устанавливаю aiohttp-socks...")
import subprocess
subprocess.check_call([sys.executable, "-m", "pip", "install", "aiohttp-socks"])
print("Установка завершена. Перезапустите тест.\n")
sys.exit(1)
asyncio.run(main())