54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
"""统一网络代理配置工具。"""
|
|
|
|
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
|