Sledujte stav CONNECT v Go v OnProxyConnectResponse
Nainstalujte háček na transport před požadavky; vrácení nil zachová jeho běžnou kontrolu stavu tunelu.
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}Použijte context, net/http a net/url; standardní typová aserce předpokládá, že tento transport zůstane nainstalován. proxyURL se parsuje a observeConnect musí být bezpečný při souběžnosti. Pro povolené veřejné HTTPS testy Seznam HTTP proxy poskytuje kandidáty pro tuto proxy URL.
Zpětné volání běží před kontrolou CONNECT na úspěšný 200, takže může pozorovat i 407. Nil pokračuje v běžné kontrole a nepřijímá odmítnutý tunel; chyba požadavek selže.
X-Proxy-Region je příklad definovaný poskytovatelem. Čtěte zde stav a hlavičky a vlastnictví těla a socketu nechte na Transport, který pak zpracovává TLS cíle.
Toto sleduje navázání nového tunelu, ne každý požadavek. Znovu použitá spojení nemají novou odpověď CONNECT a odpověď webu má samostatné hlavičky.