HTTP/2 sa zmestí do SOCKS tunela v Go
Naklonujte štandardný HTTP transport, vyberte SOCKS proxy a preskúmajte protokol cieľa, ktorý sa skutočne vyjednal.
SOCKS tunel prenáša jedno TCP spojenie. Go môže cez tento tunel vykonať TLS s cieľom a vyjednať tam HTTP/2; samotný SOCKS server nemusí hovoriť HTTP/2.
V programe, ktorý si zachováva štandardný predvolený transport Go, naklonujte jeho konfiguráciu a vyberte 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 a cieľ zostávajú odlišnými hodnotami. Pre hodnotu proxy vyberte koncový bod SOCKS5 zo zoznamu SOCKS5 proxy; HTTP/2 sa stále vyjednáva s cieľom. Pomocou client vyžiadajte skutočnú URL služby HTTPS a potom zatvorte telo odpovede obvyklým životným cyklom aplikácie.
Štandardný predvolený transport podporuje HTTP/2. Jeho klonovanie zachová túto konfiguráciu a zároveň umožní zmeniť voľbu proxy. Tvrdenie o type predpokladá, že program nenahradil http.DefaultTransport iným RoundTripperom.
Pri samostatne zostavenom transporte skontrolujte jeho konfiguráciu HTTP/2, najmä keď zadávate vlastné háky dial alebo TLS. Go sprístupňuje ForceAttemptHTTP2 a v novších verziách explicitnú konfiguráciu Protocols pre tieto voľby.
Cieľ stále musí ponúkať HTTP/2 prostredníctvom vyjednávania TLS. Preskúmajte hodnotu Proto alebo ProtoMajor úspešnej odpovede, aby ste videli, čo sa použilo. Úspešná požiadavka HTTPS cez SOCKS sama o sebe nedokazuje, že vyjednaným protokolom bolo HTTP/2.