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}

Käytä context, net/http ja net/url; vakiotyyppiväite olettaa, että tämä transport pysyy asennettuna. proxyURL jäsennetään, ja observeConnect on oltava rinnakkaisuuden suhteen turvallinen. Sallituille julkisille HTTPS-testeille HTTP-välityspalvelinluettelo tarjoaa ehdokkaita kyseiselle proxy-URL:lle.

Takaisinkutsu suoritetaan ennen kuin CONNECT tarkistetaan onnistuneen 200 varalta, joten se voi havaita myös 407:n. Nil jatkaa normaalia tarkistusta eikä hyväksy hylättyä tunnelia; virhe epäonnistuttaa pyynnön.

X-Proxy-Region on palveluntarjoajan määrittelemä esimerkki. Lue tila ja otsakkeet tästä ja jätä rungon ja socketin omistus Transportille, joka hoitaa sitten kohteen TLS:n.

Tämä tarkkailee uuden tunnelin muodostusta, ei jokaista pyyntöä. Uudelleenkäytetty yhteys ei tuota uutta CONNECT-vastausta, ja verkkosivun vastauksella on erilliset otsakkeet.

Aiheeseen liittyvät artikkelit