SOCKS tunel přenáší jedno TCP spojení. Go může přes tento tunel provést TLS s cílem a vyjednat tam HTTP/2; samotný SOCKS server nemusí HTTP/2 rozumět.

V programu, který si zachovává standardní výchozí transport Go, naklonujte jeho konfiguraci a vyberte proxy:

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,
}

Proxy a cíl zůstávají odlišnými hodnotami. Pro hodnotu proxy vyberte koncový bod SOCKS5 ze seznamu SOCKS5 proxy; HTTP/2 se stále vyjednává s cílem. Pomocí client vyžádejte skutečnou URL služby HTTPS a poté uzavřete tělo odpovědi obvyklým životním cyklem aplikace.

Standardní výchozí transport podporuje HTTP/2. Jeho klonování zachová tuto konfiguraci a zároveň umožní změnit volbu proxy. Tvrzení o typu předpokládá, že program nenahradil http.DefaultTransport jiným RoundTripperem.

U samostatně sestaveného transportu zkontrolujte jeho konfiguraci HTTP/2, zejména když zadáváte vlastní háky dial nebo TLS. Go vystavuje ForceAttemptHTTP2 a v novějších verzích explicitní konfiguraci Protocols pro tyto volby.

Cíl stále musí nabízet HTTP/2 prostřednictvím vyjednávání TLS. Prohlédněte hodnotu Proto nebo ProtoMajor úspěšné odpovědi, abyste zjistili, co bylo použito. Úspěšný požadavek HTTPS přes SOCKS sám o sobě nedokazuje, že vyjednaným protokolem bylo HTTP/2.

Související články