HTTP/2 mahub Go SOCKS-tunneli sisse
Kloonige standardne HTTP-transport, valige SOCKS-puhverserver ja uurige sihtkoha protokolli, mis tegelikult läbiräägiti.
SOCKS-tunnel kannab TCP-ühendust. Go saab selle tunneli kaudu sihtkohaga TLS-i teha ja seal HTTP/2 läbi rääkida; SOCKS-server ise ei pea HTTP/2 rääkima.
Programmis, mis säilitab Go standardse vaikimisi transporti, kloonige selle konfiguratsioon ja valige puhverserver:
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,
}
Puhverserver ja sihtkoht jäävad erinevateks väärtusteks. Valige puhverserveri väärtuseks SOCKS5 lõpp-punkt SOCKS5 puhverserverite loendist; HTTP/2 räägitakse endiselt läbi sihtkohaga. Kasutage clienti, et taotleda tegelikku HTTPS-teenuse URL-i, seejärel sulgege vastuse keha rakenduse tavapärase elutsükli kaudu.
Standardne vaikimisi transport toetab HTTP/2. Selle kloonimine säilitab konfiguratsiooni, lubades samal ajal puhverserveri valikut muuta. Tüübiväide eeldab, et programm ei ole asendanud http.DefaultTransporti teise RoundTripperiga.
Eraldi ehitatud transporthul kontrollige selle HTTP/2 konfiguratsiooni, eriti kui pakute kohandatud dial- või TLS-konksusid. Go eksponeerib ForceAttemptHTTP2 ja uuemates versioonides nende valikute jaoks selgesõnalise Protocols-konfiguratsiooni.
Sihtkoht peab endiselt pakkuma HTTP/2 TLS-i läbirääkimise kaudu. Kontrollige õnnestunud vastuse Proto või ProtoMajor väärtust, et näha, mida kasutati. SOCKS-i kaudu õnnestunud HTTPS-päring ei tõenda iseenesest, et läbiräägitud protokoll oli HTTP/2.