Gorilla WebSocket: наладзьце Dialer.Proxy для HTTP CONNECT
Наладзьце Dialer.Proxy для прамога HTTP-праксі замест таго, каб лічыць альтэрнатыўны адрас TCP завершаным тунелем праксі.
Для прамога HTTP-праксі наладзьце Dialer.Proxy у Gorilla. URL WebSocket застаецца пунктам прызначэння:
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 і любы няўдалы адказ handshake, затым кіруйце conn праз звычайны жыццёвы цыкл паведамленняў і закрыцця. Для дазволенай публічнай канчатковай кропкі WSS спіс HTTP-праксі падае кандыдатаў для proxyURL.
Дыялер HTTP-праксі адкрывае прамежкавае злучэнне і адпраўляе CONNECT для пункта прызначэння. Для wss TLS пункта прызначэння ідзе праз усталяваны тунель перад handshake WebSocket.
NetDialContext наладжвае ніжняе злучэнне TCP. Простае накіраванне яго на порт праксі не рэалізуе CONNECT. Калі Proxy таксама зададзены, уласны сеткавы callback устанаўлівае злучэнне з пасярэднікам, а слой праксі вядзе перамовы.
Пакіньце імя хоста пункта прызначэння ў URL wss, каб звычайная праверка ідэнтычнасці TLS прымянялася да патрэбнага сервера.