Stebėti Go CONNECT būseną OnProxyConnectResponse
Įdiekite kabliuką transporte prieš užklausas; grąžinus nil išsaugomas įprastas tunelio būsenos tikrinimas.
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}Naudokite context, net/http ir net/url; standartinis tipo teiginys daro prielaidą, kad šis transportas lieka įdiegtas. proxyURL analizuojamas, o observeConnect turi būti saugus lygiagretumo atžvilgiu. Leidžiamiems viešiems HTTPS bandymams HTTP proxy sąrašas pateikia kandidatus tam proxy URL.
Atgalinis iškvietimas vykdomas prieš tikrinant CONNECT dėl sėkmingo 200, todėl jis gali stebėti ir 407. Nil tęsia įprastą tikrinimą ir nepriima atmesto tunelio; klaida užklausą žlugdo.
X-Proxy-Region yra tiekėjo apibrėžtas pavyzdys. Skaitykite būseną ir antraštes čia, o kūno ir socket nuosavybę palikite Transport, kuris vėliau tvarko paskirties TLS.
Tai stebi naujo tunelio sukūrimą, o ne kiekvieną užklausą. Pakartotinai naudojama jungtis neturi naujo CONNECT atsakymo, o svetainės atsakymas turi atskiras antraštes.