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