SOCKS тунел преноси једну TCP везу. Go може да обави TLS са одредиштем кроз тај тунел и тамо да договори HTTP/2; сам SOCKS сервер не мора да говори HTTP/2.

У програму који задржава Go стандардни задати транспорт, клонирајте његову конфигурацију и изаберите прокси:

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

Прокси и одредиште остају различите вредности. Изаберите SOCKS5 крајњу тачку са листе SOCKS5 проксија за вредност проксија; HTTP/2 се и даље договара са одредиштем. Користите client за захтев стварног URL-а HTTPS услуге, затим затворите тело одговора кроз уобичајени животни циклус апликације.

Стандардни задати транспорт подржава HTTP/2. Његово клонирање задржава ту конфигурацију и омогућава промену избора проксија. Провера типа претпоставља да програм није заменио http.DefaultTransport другим RoundTripper-ом.

За засебно изграђен транспорт, прегледајте његову HTTP/2 конфигурацију, посебно када задајете прилагођене dial или TLS куке. Go излаже ForceAttemptHTTP2 и, у новијим верзијама, експлицитну конфигурацију Protocols за те изборе.

Одредиште још мора да понуди HTTP/2 кроз TLS преговарање. Проверите вредност Proto или ProtoMajor успешног одговора да видите шта је коришћено. Успешан HTTPS захтев кроз SOCKS сам по себи не доказује да је договорени протокол био HTTP/2.

Повезани чланци