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žite context, net/http a net/url; štandardná typová asercia predpokladá, že tento transport zostane nainštalovaný. proxyURL sa parsuje a observeConnect musí byť bezpečný pri súbežnosti. Pre povolené verejné HTTPS testy Zoznam HTTP proxy poskytuje kandidátov pre túto proxy URL.

Spätné volanie beží pred kontrolou CONNECT na úspešný 200, takže môže pozorovať aj 407. Nil pokračuje v bežnej kontrole a neprijíma odmietnutý tunel; chyba spôsobí zlyhanie požiadavky.

X-Proxy-Region je príklad definovaný poskytovateľom. Čítajte tu stav a hlavičky a vlastníctvo tela a socketu nechajte na Transport, ktorý potom spracúva TLS cieľa.

Toto sleduje nadviazanie nového tunela, nie každú požiadavku. Znovu použité spojenie nemá novú odpoveď CONNECT a odpoveď webu má samostatné hlavičky.

Súvisiace články