"""统一网络代理配置工具。""" import os from typing import Optional def get_proxy_url() -> Optional[str]: """从环境变量读取代理地址,统一兼容不同变量名。""" use_proxy = os.getenv("USE_PROXY", "false").lower() == "true" if not use_proxy: return None return ( os.getenv("SOCKS5_PROXY") or os.getenv("ALL_PROXY") or os.getenv("HTTPS_PROXY") or os.getenv("HTTP_PROXY") ) def get_send_msg_proxy_url() -> Optional[str]: """读取 send_msg 独立代理,未配置时回退到全局代理。""" send_msg_proxy = os.getenv("SEND_MSG_PROXY") if send_msg_proxy: return send_msg_proxy send_msg_proxy_port = os.getenv("SEND_MSG_PROXY_PORT") if send_msg_proxy_port: return f"socks5://127.0.0.1:{send_msg_proxy_port}" return get_proxy_url() def apply_global_proxy_from_env() -> Optional[str]: """将代理写入全局环境变量,确保 requests/httpx/curl 等默认走同一代理。""" proxy_url = get_proxy_url() if not proxy_url: return None os.environ["HTTP_PROXY"] = proxy_url os.environ["HTTPS_PROXY"] = proxy_url os.environ["ALL_PROXY"] = proxy_url os.environ["http_proxy"] = proxy_url os.environ["https_proxy"] = proxy_url os.environ["all_proxy"] = proxy_url # 保留本地直连,避免影响本机服务调用。 if not os.getenv("NO_PROXY"): os.environ["NO_PROXY"] = "127.0.0.1,localhost" if not os.getenv("no_proxy"): os.environ["no_proxy"] = os.environ["NO_PROXY"] return proxy_url