SOCKS tunel prenosi jednu TCP vezu. Go može obaviti TLS sa odredištem kroz taj tunel i dogovoriti HTTP/2 tamo; sam SOCKS server ne mora govoriti HTTP/2.

U programu koji zadržava Go standardni zadani transport, klonirajte njegovu konfiguraciju i odaberite 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 i odredište ostaju različite vrijednosti. Odaberite SOCKS5 krajnju tačku sa liste SOCKS5 proxyja za vrijednost proxyja; HTTP/2 se i dalje dogovara sa odredištem. Koristite client za zahtjev stvarnog URL-a HTTPS usluge, zatim zatvorite tijelo odgovora kroz uobičajeni životni ciklus aplikacije.

Standardni zadani transport podržava HTTP/2. Kloniranje zadržava tu konfiguraciju dok dopušta promjenu izbora proxyja. Provjera tipa pretpostavlja da program nije zamijenio http.DefaultTransport drugim RoundTripperom.

Za zasebno izgrađen transport, pregledajte njegovu HTTP/2 konfiguraciju, posebno kada zadajete prilagođene dial ili TLS kuke. Go izlaže ForceAttemptHTTP2 i, u novijim verzijama, eksplicitnu konfiguraciju Protocols za te izbore.

Odredište još mora ponuditi HTTP/2 kroz TLS pregovaranje. Provjerite vrijednost Proto ili ProtoMajor uspješnog odgovora da vidite što je korišteno. Uspješan HTTPS zahtjev kroz SOCKS sam po sebi ne dokazuje da je dogovoreni protokol bio HTTP/2.

Povezani članci