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}

Gebruik context, net/http en net/url; de standaard type-assertie gaat ervan uit dat dat transport geïnstalleerd blijft. proxyURL wordt geparseerd, en observeConnect moet veilig zijn bij gelijktijdigheid. Voor toegestane openbare HTTPS-probes levert Lijst met HTTP-proxy's kandidaten voor die proxy-URL.

De callback draait voordat CONNECT op een geslaagde 200 wordt gecontroleerd, dus hij kan ook 407 observeren. Nil zet de normale controle voort en accepteert geen geweigerde tunnel; een fout laat het verzoek mislukken.

X-Proxy-Region is een door de provider gedefinieerd voorbeeld. Lees hier status en headers en laat het eigendom van body en socket bij Transport, dat vervolgens de TLS van de bestemming afhandelt.

Dit observeert de opzet van een nieuwe tunnel, niet elk verzoek. Een hergebruikte verbinding heeft geen nieuwe CONNECT-respons, en de respons van de website heeft aparte headers.

Gerelateerde artikelen