diff --git a/lite/proxy_lite.py b/lite/proxy_lite.py index ce07798..faff0ae 100644 --- a/lite/proxy_lite.py +++ b/lite/proxy_lite.py @@ -162,18 +162,39 @@ def _node_val(key, default=""): def _endpoint_domain(): return _node_val("domain", "???") +def _http_method(): + """节点 HTTP 代理方法参数(新版 nodes.json 的 methods.http)。 + + 返回 (node, get):get(key, default) 优先取 methods.http 下的键, + 缺失时回退节点顶层——兼容旧扁平结构(port/username/password 直接挂在节点上)。 + """ + node = _current_node() or {} + m = (node.get("methods") or {}).get("http") or {} + + def get(key, default=""): + v = m.get(key) + if v in (None, ""): + v = node.get(key) + return default if v in (None, "") else v + + return node, get + def _endpoint_port(): - return int(_node_val("port", 443)) + """HTTP 代理端口:methods.http.port(新格式)或节点顶层 port(旧格式)。""" + _, get = _http_method() + try: + return int(get("port", 443)) + except (TypeError, ValueError): + return 443 def _endpoint_country(): return _node_val("country", "") def _proxy_auth_basic(): - """与 nginx 正向代理使用同一套 Basic 认证凭证(取自 nodes.json)。""" - node = _current_node() - if not node: - return "" - return base64.b64encode(f"{node.get('username', '')}:{node.get('password', '')}".encode()).decode() + """正向代理 Basic 认证凭证:methods.http.{username,password}(新格式) + 或节点顶层同名字段(旧格式);用于转发器向上游代理注入 Authorization。""" + _, get = _http_method() + return base64.b64encode(f"{get('username')}:{get('password')}".encode()).decode() _tls_forwarder = None _pac_server = None