Наблюдавайте CONNECT статуса на Go в OnProxyConnectResponse
Инсталирайте куката върху транспорта преди заявките; връщането на nil запазва нормалната проверка на статуса на тунела.
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; стандартното твърдение за тип предполага, че този транспорт остава инсталиран. proxyURL се анализира, а observeConnect трябва да е безопасен при паралелност. За разрешени публични HTTPS проби Списък с HTTP прокси сървъри предоставя кандидати за този proxy URL.
Обратното извикване се изпълнява преди проверката на CONNECT за успешен 200, така че може да наблюдава и 407. Nil продължава нормалната проверка и не приема отхвърлен тунел; грешка проваля заявката.
X-Proxy-Region е пример, определен от доставчика. Четете статуса и заглавките тук и оставете собствеността върху тялото и сокета на Transport, който след това се грижи за TLS на дестинацията.
Това наблюдава установяването на нов тунел, а не всяка заявка. Преизползвана връзка няма нов CONNECT отговор, а отговорът на сайта има отделни заглавки.