65 lines
2.6 KiB
Python
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()
|