En SOCKS-tunnel bærer en TCP-tilkobling. Go kan utføre TLS med destinasjonen gjennom den tunnelen og forhandle HTTP/2 der; SOCKS-serveren trenger ikke selv å snakke HTTP/2.

I et program som beholder Gos standard transport, klone konfigurasjonen og velg proxyen:

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

Proxyen og destinasjonen forblir forskjellige verdier. Velg et SOCKS5-endepunkt fra SOCKS5-proxylisten for proxyverdien; HTTP/2 forhandles fortsatt med destinasjonen. Bruk client til å be om den ekte HTTPS-tjeneste-URL-en, og lukk deretter svarteksten gjennom applikasjonens normale livssyklus.

Standardtransporten støtter HTTP/2. Kloning beholder denne konfigurasjonen og lar proxyvalget endres. Typesjekken forutsetter at programmet ikke har erstattet http.DefaultTransport med en annen RoundTripper.

For en separat bygget transport, gjennomgå HTTP/2-konfigurasjonen, spesielt når du oppgir egendefinerte dial- eller TLS-kroker. Go eksponerer ForceAttemptHTTP2 og, i nyere utgivelser, eksplisitt Protocols-konfigurasjon for disse valgene.

Destinasjonen må fortsatt tilby HTTP/2 gjennom TLS-forhandling. Undersøk Proto- eller ProtoMajor-verdien til det vellykkede svaret for å se hva som ble brukt. En HTTPS-forespørsel som lykkes gjennom SOCKS beviser ikke i seg selv at den forhandlede protokollen var HTTP/2.

Relaterte artikler