Observa o estado CONNECT de Go en OnProxyConnectResponse
Instala o gancho no transporte antes das peticións; devolver nil conserva a súa comprobación normal do estado do túnel.
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.