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.

Поврзани статии