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}

Utilitza context, net/http i net/url; l'asserció de tipus estàndard assumeix que aquest transport continua instal·lat. proxyURL es parseja, i observeConnect ha de ser segur amb concurrència. Per a les sondes HTTPS públiques permeses, Llista de proxys HTTP proporciona candidats per a aquesta URL de proxy.

La devolució de trucada s'executa abans de comprovar CONNECT per a un 200 correcte, així que també pot observar un 407. Nil continua la comprovació normal i no accepta un túnel rebutjat; un error fa fallar la petició.

X-Proxy-Region és un exemple definit pel proveïdor. Llegeix aquí l'estat i les capçaleres i deixa la propietat del cos i del sòcol a Transport, que després gestiona el TLS de destinació.

Això observa la configuració d'un túnel nou, no cada petició. Una connexió reutilitzada no té una resposta CONNECT nova, i la resposta del lloc web té capçaleres separades.

Articles relacionats