Files
oaip-project-app/test.py
2025-05-21 07:55:46 +03:00

104 lines
3.8 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.

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())