Overvåg Go's CONNECT-status i OnProxyConnectResponse
Installer hooket på transporten før anmodninger; at returnere nil bevarer dens normale kontrol af tunnelstatus.
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}Brug context, net/http og net/url; standard-typepåstanden antager, at denne transport forbliver installeret. proxyURL parses, og observeConnect skal være sikker ved samtidighed. Til tilladte offentlige HTTPS-prober leverer Liste over HTTP-proxyer kandidater til den proxy-URL.
Callbacket kører, før CONNECT tjekkes for et vellykket 200, så det kan også observere 407. Nil fortsætter den normale kontrol og accepterer ikke en afvist tunnel; en fejl får anmodningen til at fejle.
X-Proxy-Region er et udbyderdefineret eksempel. Læs status og headers her, og lad ejerskabet af body og socket blive hos Transport, som derefter håndterer destinationens TLS.
Dette observerer ny tunnelopsætning, ikke hver anmodning. En genbrugt forbindelse har ingen ny CONNECT-respons, og webstedets respons har separate headers.