Egy SOCKS-alagút TCP-kapcsolatot továbbít. A Go azon az alagúton keresztül TLS-t folytathat a céllal, és ott HTTP/2-t egyeztethet; magának a SOCKS-kiszolgálónak nem kell HTTP/2-t beszélnie.

Egy olyan programban, amely megtartja a Go szabványos alapértelmezett szállítóját, klónozza annak konfigurációját, és válassza ki a proxyt:

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

A proxy és a cél továbbra is különböző értékek. A proxy értékéhez válasszon SOCKS5-végpontot a SOCKS5-proxylistáról; a HTTP/2 továbbra is a céllal kerül egyeztetésre. A client használatával kérje le a valódi HTTPS-szolgáltatás URL-jét, majd zárja le a válasz törzsét az alkalmazás szokásos életciklusa szerint.

A szabványos alapértelmezett szállító támogatja a HTTP/2-t. A klónozás megőrzi ezt a konfigurációt, miközben lehetővé teszi a proxy kiválasztásának megváltoztatását. A típusellenőrzés feltételezi, hogy a program nem cserélte le a http.DefaultTransportot egy másik RoundTripperre.

Egy külön felépített szállító esetében tekintse át annak HTTP/2-konfigurációját, különösen egyéni dial- vagy TLS-horgok megadásakor. A Go közzéteszi a ForceAttemptHTTP2-t, az újabb kiadásokban pedig a Protocols explicit konfigurációját ezekhez a választásokhoz.

A célnak továbbra is HTTP/2-t kell kínálnia TLS-egyeztetésen keresztül. Vizsgálja meg a sikeres válasz Proto vagy ProtoMajor értékét, hogy lássa, mit használtak. Az SOCKS-on keresztül sikeres HTTPS-kérés önmagában nem bizonyítja, hogy az egyeztetett protokoll HTTP/2 volt.

Kapcsolódó cikkek