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 отговор, а отговорът на сайта има отделни заглавки.

Подобни статии