עבור פרוקסי HTTP קדמי, הגדירו את Dialer.Proxy של Gorilla. כתובת ה-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 מוגדר, קריאת הרשת המותאמת מתקשרת עם המתווך, בעוד שכבת הפרוקסי מטפלת במשא ומתן.

השאירו את שם המארח של היעד בכתובת ה-wss כדי שבדיקת הזהות הרגילה של TLS תחול על השרת המיועד.

מאמרים קשורים