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.

Подобни статии