Files
UFA-Clash/get_vpn.py
T
2026-08-13 20:17:33 +03:00

65 lines
2.6 KiB
Python

import os
import sys
import requests
def fetch_clash_config():
# Получаем ссылку-подписку из секретов Gitea/GitHub
sub_url = os.getenv("VPN_SUB_URL")
if not sub_url:
print("Ошибка: Переменная окружения VPN_SUB_URL не задана!")
sys.exit(1)
# Имитируем заголовки оригинального клиента OpenClash / Mihomo
headers = {
"User-Agent": "Clash.meta; mihomo; OpenClash",
"Accept": "*/*",
}
# На всякий случай проверяем, есть ли уже в ссылке флаг клиента.
# Если нет — панель может проигнорировать User-Agent, поэтому добавляем флаг принудительно.
if "flag=" not in sub_url:
separator = "&" if "?" in sub_url else "?"
sub_url += f"{separator}flag=clash"
try:
print("Отправка запроса к серверу VPN с заголовками Clash...")
response = requests.get(sub_url, headers=headers, timeout=20)
if response.status_code != 200:
print(
f"Ошибка сервера: Статус {response.status_code}. Проверьте ссылку."
)
sys.exit(1)
content = response.text.strip()
# Проверяем, что сервер вернул именно YAML-подобную структуру, а не ошибку JSON
if "proxies:" in content or "proxy-groups:" in content:
print("Успешно получен готовый Clash-конфиг от сервера!")
# Сохраняем результат в файл
output_file = "clash.yaml"
with open(output_file, "w", encoding="utf-8") as f:
f.write(content)
print(f"Конфигурация сохранена в файл: {output_file}")
else:
print("Предупреждение: Сервер вернул ответ, но он не похож на Clash YAML.")
print("Первые 200 символов ответа для отладки:")
print(content[:200])
# Сохраняем как есть, чтобы вы могли посмотреть, что пришло
with open("response_debug.txt", "w", encoding="utf-8") as f:
f.write(content)
sys.exit(1)
except Exception as e:
print(f"Критическая ошибка при запросе: {e}")
sys.exit(1)
if __name__ == "__main__":
fetch_clash_config()