transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
transport.OnProxyConnectResponse = func(
    _ context.Context,
    _ *url.URL,
    _ *http.Request,
    response *http.Response,
) error {
    observeConnect(response.StatusCode, response.Header.Get("X-Proxy-Region"))
    return nil
}
client := &http.Client{Transport: transport}

context, net/http және net/url қолданыңыз; стандартты типтік мәлімдеме бұл transport орнатылған күйде қалады деп болжайды. proxyURL талданады, ал observeConnect параллельдікке қауіпсіз болуы керек. Рұқсат етілген жалпыға ашық HTTPS сынақтары үшін HTTP прокси тізімі сол proxy URL үшін үміткерлерді ұсынады.

Callback CONNECT-ті сәтті 200 үшін тексеруден бұрын орындалады, сондықтан ол 407-ні де бақылай алады. Nil қалыпты тексеруді жалғастырады және қабылданбаған туннельді қабылдамайды; қате сұранысты сәтсіз етеді.

X-Proxy-Region провайдер анықтаған мысал. Мұнда мәртебені және тақырыпшаларды оқыңыз, ал дене мен socket иелігін Transport-қа қалдырыңыз, ол кейін мақсаттың TLS-ін өңдейді.

Бұл жаңа туннель құруды бақылайды, әр сұранысты емес. Қайта пайдаланылған қосылымда жаңа CONNECT жауабы жоқ, ал веб-сайт жауабының тақырыпшалары бөлек.

Қатысты мақалалар