Files
archived-MoviePilot-Plugins/plugins.v2/clashruleprovider/helper/converters/http.py
wumode 8a738b7684 refactor: ClashRuleProvider
- 优化插件目录结构和数据结构, 解耦API层和服务层
- 添加了一些Pydantic模型, 用于校验配置
- 支持独立的订阅链接配置
- 新增覆写代理组和出站代理操作
- 支持 smart 组和代理集合
- 代理组回环检测
- 使用异步调度器
- 显示规则更改日期
- 完善了对嵌套逻辑规则和子规则的配置和验证
2025-09-30 00:54:24 +08:00

47 lines
1.6 KiB
Python

import binascii
from typing import Dict, Any, Optional
from urllib.parse import urlparse, unquote
from . import BaseConverter
class HttpConverter(BaseConverter):
def convert(self, link: str, names: Dict[str, int]) -> Optional[Dict[str, Any]]:
try:
parsed = urlparse(link)
server = parsed.hostname
port = parsed.port
name = self.unique_name(names, unquote(parsed.fragment or f"{server}:{port}"))
username = None
password = None
if parsed.username:
try:
# The userinfo part might be base64 encoded
decoded_userinfo = self.decode_base64(parsed.username.encode('utf-8')).decode('utf-8')
if ":" in decoded_userinfo:
username, password = decoded_userinfo.split(":", 1)
else:
username = decoded_userinfo
except (binascii.Error, UnicodeDecodeError):
# If not base64 encoded, use directly
username = parsed.username
password = parsed.password if parsed.password else ""
proxy = {
"name": name,
"type": "http",
"server": server,
"port": port,
"username": username,
"password": password,
"skip-cert-verify": True
}
if parsed.scheme == "https":
proxy["tls"] = True
return proxy
except Exception:
return None