برای یک پروکسی پیشرو 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 نیز تنظیم شده باشد، callback شبکه سفارشی با واسطه تماس می‌گیرد، در حالی که لایه پروکسی مذاکره را بر عهده دارد.

نام میزبان مقصد را در نشانی wss نگه دارید تا بررسی عادی هویت TLS بر سرور موردنظر اعمال شود.

مقالات مرتبط