HTTP/2 se prilega v Gojev SOCKS tunel
Klonirajte standardni transport HTTP, izberite proxy SOCKS in preglejte ciljni protokol, o katerem je bilo dejansko dogovorjeno.
Tunel SOCKS prenaša eno povezavo TCP. Go lahko skozi ta tunel izvede TLS s ciljem in tam dogovori HTTP/2; sam strežnik SOCKS mu ni treba govoriti HTTP/2.
V programu, ki ohrani standardni privzeti transport Go, klonirajte njegovo konfiguracijo in izberite 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 in cilj ostaneta različni vrednosti. Za vrednost proxyja izberite končno točko SOCKS5 s seznama proxyjev SOCKS5; HTTP/2 se še vedno dogovarja s ciljem. Uporabite client za zahtevo po resničnem URL-ju storitve HTTPS, nato zaprite telo odgovora skozi običajni življenjski cikel aplikacije.
Standardni privzeti transport podpira HTTP/2. Kloniranje ohrani to konfiguracijo in hkrati omogoči spremembo izbire proxyja. Preverjanje tipa predpostavlja, da program ni zamenjal http.DefaultTransport z drugim RoundTripperjem.
Pri ločeno zgrajenem transportu preglejte njegovo konfiguracijo HTTP/2, zlasti ko zagotavljate kavlje dial ali TLS po meri. Go izpostavi ForceAttemptHTTP2 in v novejših izdajah eksplicitno konfiguracijo Protocols za te izbire.
Cilj mora še vedno ponuditi HTTP/2 prek pogajanja TLS. Preglejte vrednost Proto ali ProtoMajor uspešnega odgovora, da vidite, kaj je bilo uporabljeno. Uspešna zahteva HTTPS prek SOCKS sama po sebi ne dokazuje, da je bil dogovorjeni protokol HTTP/2.