- 分离 Request 的配置态与执行态,修复二次 Do、raw 模式网络配置失效和 body 来源互斥问题 - 新增 starnet trace 抽象,补齐 DNS/连接/TLS/重试事件,并优化动态 transport 缓存与代理解析路径 - 收紧非法代理为 fail-fast,多目标目标回退仅限幂等请求,修复 Host/TLS/SNI 等语义边界 - 补充防御性拷贝、专项回归测试、本地代理/TLS 用例与 README 行为说明
72 lines
2.1 KiB
Go
72 lines
2.1 KiB
Go
package starnet
|
||
|
||
import (
|
||
"context"
|
||
"crypto/tls"
|
||
"net"
|
||
"time"
|
||
)
|
||
|
||
// SetTimeout 设置请求总超时时间
|
||
// timeout > 0: 为本次请求注入 context 超时
|
||
// timeout = 0: 不额外设置请求总超时
|
||
// timeout < 0: 禁用 starnet 默认总超时
|
||
func (r *Request) SetTimeout(timeout time.Duration) *Request {
|
||
return r.applyMutation(mutateTimeout(timeout))
|
||
}
|
||
|
||
// SetDialTimeout 设置连接超时时间
|
||
func (r *Request) SetDialTimeout(timeout time.Duration) *Request {
|
||
return r.applyMutation(mutateDialTimeout(timeout))
|
||
}
|
||
|
||
// SetProxy 设置代理
|
||
func (r *Request) SetProxy(proxy string) *Request {
|
||
return r.applyMutation(mutateProxy(proxy))
|
||
}
|
||
|
||
// SetDialFunc 设置自定义 Dial 函数
|
||
func (r *Request) SetDialFunc(fn func(ctx context.Context, network, addr string) (net.Conn, error)) *Request {
|
||
return r.applyMutation(mutateDialFunc(fn))
|
||
}
|
||
|
||
// SetTLSConfig 设置 TLS 配置
|
||
func (r *Request) SetTLSConfig(tlsConfig *tls.Config) *Request {
|
||
return r.applyMutation(mutateTLSConfig(tlsConfig))
|
||
}
|
||
|
||
// SetTLSServerName 设置显式 TLS ServerName/SNI。
|
||
func (r *Request) SetTLSServerName(serverName string) *Request {
|
||
return r.applyMutation(mutateTLSServerName(serverName))
|
||
}
|
||
|
||
// SetSkipTLSVerify 设置是否跳过 TLS 验证
|
||
func (r *Request) SetSkipTLSVerify(skip bool) *Request {
|
||
return r.applyMutation(mutateSkipTLSVerify(skip))
|
||
}
|
||
|
||
// SetCustomIP 设置自定义 IP(直接指定 IP,跳过 DNS)
|
||
func (r *Request) SetCustomIP(ips []string) *Request {
|
||
return r.applyMutation(mutateCustomIP(ips))
|
||
}
|
||
|
||
// AddCustomIP 添加自定义 IP
|
||
func (r *Request) AddCustomIP(ip string) *Request {
|
||
return r.applyMutation(mutateAddCustomIP(ip))
|
||
}
|
||
|
||
// SetCustomDNS 设置自定义 DNS 服务器
|
||
func (r *Request) SetCustomDNS(dnsServers []string) *Request {
|
||
return r.applyMutation(mutateCustomDNS(dnsServers))
|
||
}
|
||
|
||
// AddCustomDNS 添加自定义 DNS 服务器
|
||
func (r *Request) AddCustomDNS(dns string) *Request {
|
||
return r.applyMutation(mutateAddCustomDNS(dns))
|
||
}
|
||
|
||
// SetLookupFunc 设置自定义 DNS 解析函数
|
||
func (r *Request) SetLookupFunc(fn func(ctx context.Context, host string) ([]net.IPAddr, error)) *Request {
|
||
return r.applyMutation(mutateLookupFunc(fn))
|
||
}
|