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}

Usa context, net/http e net/url; a aserción de tipo estándar supón que ese transporte segue instalado. proxyURL analízase, e observeConnect debe ser seguro fronte á concorrencia. Para as sondas HTTPS públicas permitidas, Lista de proxies HTTP fornece candidatos para esa URL de proxy.

A devolución de chamada execútase antes de comprobar CONNECT para un 200 correcto, así que tamén pode observar 407. Nil continúa a comprobación normal e non acepta un túnel rexeitado; un erro fai fallar a petición.

X-Proxy-Region é un exemplo definido polo provedor. Le aquí o estado e as cabeceiras e deixa a propiedade do corpo e do socket a Transport, que despois xestiona o TLS do destino.

Isto observa o establecemento dun túnel novo, non cada petición. Unha conexión reutilizada non ten unha resposta CONNECT nova, e a resposta do sitio web ten cabeceiras separadas.

Artigos relacionados