Një tunel SOCKS transporton një lidhje TCP. Go mund të kryejë TLS me destinacionin përmes atij tuneli dhe të negociojë HTTP/2 atje; serveri SOCKS nuk ka nevojë të flasë vetë HTTP/2.

Në një program që ruan transportin standard të parazgjedhur të Go, klononi konfigurimin e tij dhe zgjidhni proxy-n:

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 dhe destinacioni mbeten vlera të ndryshme. Zgjidhni një pikë fundore SOCKS5 nga lista e proxy-ve SOCKS5 për vlerën e proxy-t; HTTP/2 vazhdon të negociohet me destinacionin. Përdorni client për të kërkuar URL-në reale të shërbimit HTTPS, pastaj mbyllni trupin e përgjigjes përmes ciklit normal të jetës së aplikacionit.

Transporti standard i parazgjedhur mbështet HTTP/2. Klonimi i tij ruan atë konfigurim duke lejuar ndryshimin e zgjedhjes së proxy-t. Kontrolli i tipit supozon se programi nuk e ka zëvendësuar http.DefaultTransport me një RoundTripper tjetër.

Për një transport të ndërtuar veçmas, rishikoni konfigurimin e tij HTTP/2, sidomos kur jepni grepa dial ose TLS të personalizuar. Go ekspozon ForceAttemptHTTP2 dhe, në versionet më të reja, konfigurim të qartë Protocols për këto zgjedhje.

Destinacioni duhet ende të ofrojë HTTP/2 përmes negociimit TLS. Inspektoni vlerën Proto ose ProtoMajor të përgjigjes së suksesshme për të parë çfarë u përdor. Një kërkesë HTTPS që ka sukses përmes SOCKS nuk dëshmon në vetvete se protokolli i negociuar ishte HTTP/2.

Artikuj të ngjashëm