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 går ut frå at denne transporten blir verande installert. proxyURL blir parsa, og observeConnect må vere trygg med samtidigheit. For tillatne offentlege HTTPS-prøver leverer Liste over HTTP-proxyar kandidatar for den proxy-URL-en.

Callbacken køyrer før CONNECT blir sjekka for vellukka 200, så han kan også observere 407. Nil held fram den normale sjekken og godtek ikkje ein avvist tunnel; ein feil gjer at førespurnaden mislukkast.

X-Proxy-Region er eit døme definert av leverandøren. Les status og headers her, og la eigarskapen til body og socket bli hos Transport, som deretter handterer TLS-en til destinasjonen.

Dette observerer oppsett av ein ny tunnel, ikkje kvar førespurnad. Ei gjenbrukt tilkobling har ingen ny CONNECT-respons, og responsen til nettstaden har separate headers.

Relaterte artiklar