Observa l'estat CONNECT de Go a OnProxyConnectResponse
Instal·la el ganxo al transport abans de les peticions; retornar nil conserva la comprovació normal de l'estat del 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}Utilitza context, net/http i net/url; l'asserció de tipus estàndard assumeix que aquest transport continua instal·lat. proxyURL es parseja, i observeConnect ha de ser segur amb concurrència. Per a les sondes HTTPS públiques permeses, Llista de proxys HTTP proporciona candidats per a aquesta URL de proxy.
La devolució de trucada s'executa abans de comprovar CONNECT per a un 200 correcte, així que també pot observar un 407. Nil continua la comprovació normal i no accepta un túnel rebutjat; un error fa fallar la petició.
X-Proxy-Region és un exemple definit pel proveïdor. Llegeix aquí l'estat i les capçaleres i deixa la propietat del cos i del sòcol a Transport, que després gestiona el TLS de destinació.
Això observa la configuració d'un túnel nou, no cada petició. Una connexió reutilitzada no té una resposta CONNECT nova, i la resposta del lloc web té capçaleres separades.