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}

Bruk context, net/http og net/url; standard typepåstand antar at denne transporten forblir installert. proxyURL parses, og observeConnect må være trygg med samtidighet. For tillatte offentlige HTTPS-prober leverer Liste over HTTP-proxyer kandidater for den proxy-URL-en.

Callbacken kjører før CONNECT sjekkes for vellykket 200, så den kan også observere 407. Nil fortsetter den normale sjekken og godtar ikke en avvist tunnel; en feil får forespørselen til å mislykkes.

X-Proxy-Region er et eksempel definert av leverandøren. Les status og headere her, og la eierskapet til body og socket bli hos Transport, som deretter håndterer destinasjonens TLS.

Dette observerer oppsett av en ny tunnel, ikke hver forespørsel. En gjenbrukt tilkobling har ingen ny CONNECT-respons, og nettstedets respons har separate headere.

Relaterte artikler