Bir SOCKS tüneli tek bir TCP bağlantısı taşır. Go bu tünel üzerinden hedefle TLS gerçekleştirebilir ve orada HTTP/2 anlaşabilir; SOCKS sunucusunun kendisi HTTP/2 konuşmak zorunda değildir.

Go'nun standart varsayılan taşıyıcısını koruyan bir programda, yapılandırmasını klonlayın ve vekili seçin:

import (
    "net/http"
    "net/url"
    "time"
)

proxyURL := &url.URL{
    Scheme: "socks5",
    Host: "proxy.example:1080",
}
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
client := &http.Client{
    Transport: transport,
    Timeout: 30 * time.Second,
}

Vekil ve hedef farklı değerler olarak kalır. Vekil değeri için SOCKS5 vekil listesinden bir SOCKS5 uç noktası seçin; HTTP/2 yine de hedefle anlaşılır. Gerçek HTTPS hizmet URL'sini istemek için client kullanın, ardından yanıt gövdesini uygulamanın olağan yaşam döngüsüyle kapatın.

Standart varsayılan taşıyıcı HTTP/2'yi destekler. Kopyalanması bu yapılandırmayı korurken vekil seçiminin değişmesine izin verir. Tür doğrulaması, programın http.DefaultTransport'u başka bir RoundTripper ile değiştirmediğini varsayar.

Ayrı olarak oluşturulmuş bir taşıyıcı için HTTP/2 yapılandırmasını, özellikle özel dial veya TLS kancaları sağlarken gözden geçirin. Go, ForceAttemptHTTP2'yi ve daha yeni sürümlerde bu seçimler için açık Protocols yapılandırmasını sunar.

Hedefin hâlâ TLS anlaşması yoluyla HTTP/2 sunması gerekir. Ne kullanıldığını görmek için başarılı yanıtın Proto veya ProtoMajor değerini inceleyin. SOCKS üzerinden başarılı bir HTTPS isteği, anlaşılan protokolün HTTP/2 olduğunu kendi başına kanıtlamaz.

İlgili makaleler