SOCKS tunel prenosi jednu TCP vezu. Go može obaviti TLS s odredištem kroz taj tunel i dogovoriti HTTP/2 tamo; sam SOCKS poslužitelj 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 točku s popisa SOCKS5 proxyja za vrijednost proxyja; HTTP/2 se i dalje dogovara s odredištem. Upotrijebite 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 odabira proxyja. Provjera tipa pretpostavlja da program nije zamijenio http.DefaultTransport drugim RoundTripperom.

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

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

Povezani članci