Gorilla WebSocket:为 HTTP CONNECT 配置 Dialer.Proxy
为 HTTP 正向代理配置 Dialer.Proxy,而不是把另一个 TCP 地址当作已完成的代理隧道。
对于 HTTP 正向代理,请配置 Gorilla 的 Dialer.Proxy。WebSocket URL 仍是目标地址:
proxyURL, err := url.Parse("http://proxy.example:8080")
if err != nil {
return err
}
dialer := websocket.Dialer{
Proxy: http.ProxyURL(proxyURL),
HandshakeTimeout: 15 * time.Second,
}
conn, response, err := dialer.DialContext(
ctx, "wss://events.example/stream", nil)
该片段应放在应用的连接函数中,并确保 net/url、net/http、time 和 github.com/gorilla/websocket 可用。处理 err 和任何握手失败的响应,然后通过常规的消息与关闭生命周期管理 conn。对于允许访问的公共 WSS 端点,HTTP 代理列表 可提供 proxyURL 的候选。
HTTP 代理拨号器会打开中间连接,并为目标发送 CONNECT。对于 wss,目标 TLS 会在 WebSocket 握手之前经由已建立的隧道进行。
NetDialContext 用于自定义底层 TCP 连接。仅将其指向代理端口并不会实现 CONNECT。当同时设置 Proxy 时,自定义网络回调负责连接中间方,而代理层负责协商。
在 wss URL 中保留目标主机名,以便常规的 TLS 身份校验作用于预期的服务器。