En SOCKS-Tunnel transportéiert eng TCP-Verbindung. Go kann TLS mam Zil duerch dësen Tunnel maachen an do HTTP/2 ausverhandelen; de SOCKS-Server muss selwer net HTTP/2 schwätzen.

An engem Programm, dat den Standard-Standardtransport vu Go behält, klonéiert seng Konfiguratioun a wielt de Proxy aus:

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,
}

De Proxy an d'Zil bleiwen ënnerschiddlech Wäerter. Wielt en SOCKS5-Endpunkt aus der SOCKS5-Proxy-Lëscht fir de Proxywäert; HTTP/2 gëtt nach ëmmer mam Zil ausverhandelt. Benotzt client fir déi richteg HTTPS-Service-URL unzefroen, a schléisst dann de Äntwertkierper iwwer den normale Liewenszyklus vun der Applikatioun.

Den Standard-Standardtransport ënnerstëtzt HTTP/2. D'Klonen hält dës Konfiguratioun bäi an erlaabt et, d'Proxywiel ze änneren. D'Typ-Assertion geet dovun aus, datt d'Programm http.DefaultTransport net duerch en aneren RoundTripper ersat huet.

Fir en separat gebaute Transport, iwwerpréift seng HTTP/2-Konfiguratioun, besonnesch wann Dir eegen dial- oder TLS-Hooks ubitt. Go stellt ForceAttemptHTTP2 an, an neien Verëffentlechungen, eng explizit Protocols-Konfiguratioun fir dës Wieler bereet.

D'Zil muss nach ëmmer HTTP/2 iwwer TLS-Ausverhandlung ubidden. Kuckt de Proto- oder ProtoMajor-Wäert vun der erfollegräicher Äntwert un, fir ze gesinn wat benotzt gouf. Eng HTTPS-Ufro, déi duerch SOCKS geléngt, beweist net vu sech aus, datt den ausgehandelten Protokoll HTTP/2 war.

Ähnlech Artikelen