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}

Use context, net/http e net/url; a asserção de tipo padrão pressupõe que esse transport permaneça instalado. proxyURL é analisado, e observeConnect precisa ser seguro quanto à concorrência. Para sondagens HTTPS públicas permitidas, Lista de proxies HTTP fornece candidatos para essa URL de proxy.

O callback executa antes da verificação de CONNECT para um 200 bem-sucedido, então também pode observar 407. Nil continua a verificação normal e não aceita um túnel rejeitado; um erro faz a requisição falhar.

X-Proxy-Region é um exemplo definido pelo provedor. Leia status e cabeçalhos aqui e deixe a posse do corpo e do socket com o Transport, que então cuida do TLS de destino.

Isto observa a criação de um novo túnel, não cada requisição. Uma conexão reutilizada não tem nova resposta CONNECT, e a resposta do site tem cabeçalhos separados.

Artigos relacionados