HTTP/2 telpa į Go SOCKS tunelį
Klonuokite standartinį HTTP transportą, pasirinkite SOCKS tarpinį serverį ir patikrinkite faktinį suderintą paskirties protokolą.
SOCKS tunelis perduoda TCP ryšį. Go gali atlikti TLS su paskirties tašku per tą tunelį ir ten derėtis dėl HTTP/2; pačiam SOCKS serveriui nereikia kalbėti HTTP/2.
Programoje, kuri išlaiko standartinį numatytąjį Go transportą, klonuokite jo konfigūraciją ir pasirinkite tarpinį serverį:
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,
}
Tarpinis serveris ir paskirties taškas išlieka skirtingos reikšmės. Tarpinio serverio reikšmei pasirinkite SOCKS5 galinį tašką iš SOCKS5 tarpinių serverių sąrašo; HTTP/2 vis dar derinamas su paskirties tašku. Naudokite client, kad užklaustumėte tikrąjį HTTPS paslaugos URL, tada uždarykite atsakymo turinį įprastu programos gyvavimo ciklu.
Standartinis numatytasis transportas palaiko HTTP/2. Jį klonuojant išsaugoma ši konfigūracija ir leidžiama pakeisti tarpinio serverio pasirinkimą. Tipo patikra daro prielaidą, kad programa nepakeitė http.DefaultTransport kitu RoundTripper.
Atskirai sukonstruotam transportui peržiūrėkite jo HTTP/2 konfigūraciją, ypač kai pateikiate pasirinktinius dial arba TLS kabliukus. Go atskleidžia ForceAttemptHTTP2 ir naujesnėse versijose aiškią Protocols konfigūraciją tiems pasirinkimams.
Paskirties taškas vis tiek turi pasiūlyti HTTP/2 per TLS derybas. Patikrinkite sėkmingo atsakymo Proto arba ProtoMajor reikšmę, kad pamatytumėte, kas buvo naudojama. Sėkminga HTTPS užklausa per SOCKS pati savaime neįrodo, kad suderintas protokolas buvo HTTP/2.