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-ը՝ իրական HTTPS ծառայության URL-ը հարցնելու համար, ապա փակեք պատասխանի մարմինը ծրագրի սովորական կյանքի ցիկլով։

Ստանդարտ լռելյայն փոխադրիչը աջակցում է HTTP/2-ին։ Այն կլոնավորելը պահպանում է այդ կոնֆիգուրացիան՝ միաժամանակ թույլ տալով փոխել վստահված սպասարկիչի ընտրությունը։ Տիպի ստուգումը ենթադրում է, որ ծրագիրը http.DefaultTransport-ը չի փոխարինել այլ RoundTripper-ով։

Առանձին կառուցված փոխադրիչի համար վերանայեք դրա HTTP/2 կոնֆիգուրացիան, հատկապես երբ տրամադրում եք հատուկ dial կամ TLS կեռիկներ։ Go-ն տրամադրում է ForceAttemptHTTP2 և նոր թողարկումներում այդ ընտրությունների համար բացահայտ Protocols կոնֆիգուրացիա։

Նպատակակետը դեռ պետք է առաջարկի HTTP/2 TLS համաձայնեցման միջոցով։ Ստուգեք հաջող պատասխանի Proto կամ ProtoMajor արժեքը՝ տեսնելու, թե ինչ է օգտագործվել։ SOCKS-ի միջով հաջողված HTTPS հարցումն ինքնին չի ապացուցում, որ համաձայնեցված արձանագրությունը HTTP/2 էր։

Առնչվող հոդվածներ