Obserwuj stan CONNECT Go w OnProxyConnectResponse
Zainstaluj hook na transporcie przed żądaniami; zwrócenie nil zachowuje normalne sprawdzanie stanu 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}Użyj context, net/http i net/url; standardowa asercja typu zakłada, że ten transport pozostaje zainstalowany. proxyURL jest parsowany, a observeConnect musi być bezpieczny pod względem współbieżności. Dla dozwolonych publicznych sond HTTPS Lista serwerów proxy HTTP dostarcza kandydatów dla tego URL-a proxy.
Callback uruchamia się przed sprawdzeniem CONNECT pod kątem udanego 200, więc może obserwować także 407. Nil kontynuuje normalne sprawdzanie i nie akceptuje odrzuconego tunelu; błąd powoduje niepowodzenie żądania.
X-Proxy-Region to przykład zdefiniowany przez dostawcę. Czytaj tutaj status i nagłówki, a własność ciała i gniazda pozostaw Transportowi, który następnie obsługuje TLS celu.
To obserwuje tworzenie nowego tunelu, a nie każde żądanie. Ponownie użyte połączenie nie ma nowej odpowiedzi CONNECT, a odpowiedź witryny ma osobne nagłówki.