Osservare lo stato CONNECT di Go in OnProxyConnectResponse
Installa l'hook sul transport prima delle richieste; restituire nil conserva il suo normale controllo dello stato del tunnel.
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; l'asserzione di tipo standard presuppone che quel transport resti installato. proxyURL viene analizzato e observeConnect deve essere sicuro rispetto alla concorrenza. Per le sonde HTTPS pubbliche consentite, Elenco di proxy HTTP fornisce candidati per quell'URL del proxy.
La callback viene eseguita prima del controllo di CONNECT per un 200 riuscito, quindi può osservare anche 407. Nil prosegue il controllo normale e non accetta un tunnel rifiutato; un errore fa fallire la richiesta.
X-Proxy-Region è un esempio definito dal provider. Leggi qui stato e intestazioni e lascia la proprietà di body e socket a Transport, che poi gestisce il TLS di destinazione.
Questo osserva la creazione di un nuovo tunnel, non ogni richiesta. Una connessione riutilizzata non ha una nuova risposta CONNECT, e la risposta del sito ha intestazioni separate.