Pratite Go CONNECT status u OnProxyConnectResponse
Instalirajte kuku na transport prije zahtjeva; vraćanje nil čuva njegovu uobičajenu provjeru statusa tunela.
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}Koristite context, net/http i net/url; standardna tvrdnja tipa pretpostavlja da taj transport ostaje instaliran. proxyURL se parsira, a observeConnect mora biti siguran za paralelan rad. Za dopuštene javne HTTPS probe, Popis HTTP proxyja daje kandidate za taj proxy URL.
Povratni poziv izvodi se prije provjere CONNECT-a na uspješan 200, pa može primijetiti i 407. Nil nastavlja uobičajenu provjeru i ne prihvaća odbijeni tunel; pogreška ruši zahtjev.
X-Proxy-Region je primjer koji definira pružatelj. Čitajte status i zaglavlja ovdje, a vlasništvo nad tijelom i socketom ostavite Transportu, koji zatim obrađuje TLS odredišta.
Ovo prati uspostavljanje novog tunela, ne svaki zahtjev. Ponovno korištena veza nema novi CONNECT odgovor, a odgovor web stranice ima zasebna zaglavlja.