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.

Susiję straipsniai