Observera Go:s CONNECT-status i OnProxyConnectResponse
Installera kroken på transporten före förfrågningar; att returnera nil bevarar den normala kontrollen av 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}Använd context, net/http och net/url; standardtypåståendet förutsätter att den transporten förblir installerad. proxyURL parsas, och observeConnect måste vara samtidighetssäker. För tillåtna offentliga HTTPS-prober tillhandahåller Lista över HTTP-proxyer kandidater för den proxy-URL:en.
Callbacken körs innan CONNECT kontrolleras för lyckat 200, så den kan även observera 407. Nil fortsätter den normala kontrollen och accepterar inte en avvisad tunnel; ett fel får förfrågan att misslyckas.
X-Proxy-Region är ett exempel som definieras av leverantören. Läs status och headers här och lämna ägandet av body och socket till Transport, som sedan hanterar målets TLS.
Detta observerar upprättandet av en ny tunnel, inte varje förfrågan. En återanvänd anslutning har inget nytt CONNECT-svar, och webbplatsens svar har separata headers.