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 әлі де мақсатпен келісіледі. Нақты HTTPS қызметінің URL-ін сұрау үшін client пайдаланыңыз, содан кейін жауап денесін қолданбаның әдеттегі өмірлік циклі арқылы жабыңыз.
Стандартты әдепкі тасымалдағыш HTTP/2 қолдайды. Оны клондау сол конфигурацияны сақтай отырып, прокси таңдауын өзгертуге мүмкіндік береді. Типті тексеру бағдарлама http.DefaultTransport-ты басқа RoundTripper-мен ауыстырмаған деп болжайды.
Бөлек құрылған тасымалдағыш үшін оның HTTP/2 конфигурациясын қарап шығыңыз, әсіресе теңшелген dial немесе TLS ілмектерін бергенде. Go ForceAttemptHTTP2-ні және жаңа шығарылымдарда осы таңдаулар үшін айқын Protocols конфигурациясын ұсынады.
Мақсат әлі де TLS келісімі арқылы HTTP/2 ұсынуы керек. Не пайдаланылғанын көру үшін сәтті жауаптың Proto немесе ProtoMajor мәнін тексеріңіз. SOCKS арқылы сәтті HTTPS сұранысы келісілген протоколдың HTTP/2 болғанын өзінен-өзі дәлелдемейді.