HTTP/2-ը տեղավորվում է Go-ի SOCKS թունելի ներսում
Կլոնավորեք ստանդարտ HTTP փոխադրիչը, ընտրեք SOCKS վստահված սպասարկիչը և ուսումնասիրեք այն նպատակակետ արձանագրությունը, որը իրականում համաձայնեցվել է:
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 էր։