A Go CONNECT-állapotának megfigyelése az OnProxyConnectResponse-ban
Telepítse a hookot a transportra a kérések előtt; a nil visszaadása megőrzi a szokásos alagútállapot-ellenőrzést.
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}Használja a context, net/http és net/url csomagokat; a szabványos típusállítás feltételezi, hogy ez a transport telepítve marad. A proxyURL feldolgozásra kerül, és a observeConnect-nek párhuzamosság-biztosnak kell lennie. Az engedélyezett nyilvános HTTPS-próbákhoz a HTTP-proxy lista jelölteket kínál ehhez a proxy URL-hez.
A callback a CONNECT sikeres 200-as ellenőrzése előtt fut, így a 407-et is megfigyelheti. A nil folytatja a szokásos ellenőrzést, és nem fogad el elutasított alagutat; egy hiba meghiúsítja a kérést.
A X-Proxy-Region szolgáltató által meghatározott példa. Itt olvassa a státuszt és a fejléceket, a test és a socket tulajdonjogát pedig hagyja a Transportnál, amely aztán a cél TLS-ét kezeli.
Ez az új alagút létrehozását figyeli, nem minden kérést. Az újrahasznosított kapcsolatnak nincs új CONNECT-válasza, és a webhely válaszának külön fejlécei vannak.