Documentation
¶
Overview ¶
Package httpclient 提供 CP 与 Worker 共用的「每进程出站 HTTP 客户端工厂」(FR-174,见 ADR-037)。
所有出站下载(自更新 feed/二进制、JDK 归档、服务端 jar、CFR、未来 GitHub API)经本工厂 构造的 *http.Client 出站,统一受进程级代理配置约束:
- 空配 → 回退 http.ProxyFromEnvironment(等价改造前行为,仍尊重 HTTP_PROXY/NO_PROXY 环境变量);
- http(s) 代理 → Transport.Proxy 固定返回该代理,但遵守 no_proxy;
- socks5 代理 → 经 golang.org/x/net/proxy 构造 SOCKS5 dialer,no_proxy 命中走直连;
- 非法代理 URL → 返回 error,供启动时 fail-fast。
工厂只负责 proxy/transport,不写死请求超时(大文件下载的长超时由各调用方控制)。
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func New ¶
New 按进程代理配置构造出站 *http.Client。
cfg.URL 留空时回退 ProxyFromEnvironment(行为同改造前 http.DefaultClient)。 非法/不支持 scheme 的 URL 返回 error(调用方应在启动时 fail-fast,不静默直连)。 返回的 client 不设 Timeout,由调用方按下载场景自行设置(避免掐断大文件下载)。
func ProxyGeneration ¶
ProxyGeneration 返回代理配置的稳定哈希「代标识」(FR-185,见 ADR-043)。
用于心跳下发时的 generation 比较:CP 据期望代理算 generation 随心跳下发, Worker 仅当与本地已应用代不同时才重建 client(避免每拍重建)。 空配置(无显式代理)返回空串,便于与「期望直连」「未下发」语义对齐: 二者都应得空 generation,Worker 收到空 generation 时回退本地 yaml/env、不强制重建。 非空配置返回 url 与 no_proxy 的 FNV-1a 十六进制哈希(url 变化或 no_proxy 变化都改变哈希)。
Types ¶
type Config ¶
type Config struct {
// URL 代理地址,scheme 决定类型:http:// / https:// / socks5://。
// 留空表示不显式配置,回退 ProxyFromEnvironment(尊重环境变量代理)。
// 含凭据时经 ${ENV_VAR} 注入、不硬编码(config-files 规范)。
URL string `mapstructure:"url"`
// NoProxy 逗号分隔的免代理主机/域/CIDR(语义同 NO_PROXY 环境变量)。
NoProxy string `mapstructure:"no_proxy"`
}
Config 是单个进程的出站代理配置(mapstructure 直接映射 yaml 的 proxy 段)。
type Provider ¶
type Provider struct {
// contains filtered or unexported fields
}
Provider 是「可运行时重建的出站 *http.Client 持有者」(FR-185,见 ADR-043)。
出站代理升级为运行时可热生效后,CP/Worker 不再只在启动时 httpclient.New 一次, 而是持有一个 Provider:各下载点每次取当前 client(Client()),保存/下发新代理后 经 Rebuild 原子替换持有的 client,对后续下载即时生效、无需重启。 内部用 atomic.Pointer 保证并发取用/替换无锁安全(多下载 goroutine 与设置保存并发)。
func NewProvider ¶
NewProvider 按初始代理配置构造持有者。 cfg 非法(不支持 scheme / 不可解析)时返回 error(同 New,供启动时 fail-fast)。