HTTP/2 Go'nun SOCKS tünelinin içine sığar
Standart HTTP taşıyıcısını klonlayın, SOCKS vekilini seçin ve gerçekte anlaşılan hedef protokolünü inceleyin.
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.