import aiohttp import asyncio import json class V2rayAController: def __init__(self, host='http://localhost:2017', username='admin', password='admin'): self.host = host self.username = username self.password = password self.token = None self.session = None async def authenticate(self): """Аутентификация и получение токена""" self.session = aiohttp.ClientSession() auth_url = f"{self.host}/api/login" credentials = { 'username': self.username, 'password': self.password } try: async with self.session.post(auth_url, json=credentials) as response: if response.status == 200: data = await response.json() self.token = data.get('data').get('token') print("V2RayA auth OK") return True else: print(f"Ошибка аутентификации: {response.status}") return False except Exception as e: print(f"Ошибка при аутентификации: {e}") return False async def enable_proxy(self): """Включение прокси""" if not self.token: print("Не выполнен вход. Пожалуйста, сначала выполните аутентификацию") return False url = f"{self.host}/api/v2ray" headers = {'Authorization': f"Bearer {self.token}"} data = {} try: async with self.session.post(url, headers=headers, json=data) as response: if response.status == 200: print("Прокси успешно включен") return True else: print(f"Ошибка при включении прокси: {response.status}") return False except Exception as e: print(f"Ошибка при включении прокси: {e}") return False async def disable_proxy(self): """Выключение прокси""" if not self.token: print("Не выполнен вход. Пожалуйста, сначала выполните аутентификацию") return False url = f"{self.host}/api/v2ray" headers = {'Authorization': f"Bearer {self.token}"} data = {'operation': 'stop'} try: async with self.session.delete(url, headers=headers, json=data) as response: if response.status == 200: print("Прокси успешно выключен") return True else: print(f"Ошибка при выключении прокси: {response.status}") return False except Exception as e: print(f"Ошибка при выключении прокси: {e}") return False async def close(self): """Закрытие сессии""" if self.session: await self.session.close() async def main(): # Инициализация контроллера controller = V2rayAController( host='http://localhost:2017', username='admin123', password='admin123' ) # Аутентификация if await controller.authenticate(): # Примеры использования await controller.enable_proxy() await asyncio.sleep(20) # Пауза для демонстрации await controller.disable_proxy() # Закрытие сессии await controller.close() if __name__ == "__main__": asyncio.run(main())