Observați starea CONNECT a Go în OnProxyConnectResponse
Instalați hook-ul pe transport înainte de cereri; returnarea nil păstrează verificarea normală a stării tunelului.
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}Folosiți context, net/http și net/url; aserțiunea de tip standard presupune că acel transport rămâne instalat. proxyURL este analizat, iar observeConnect trebuie să fie sigur în privința concurenței. Pentru probele HTTPS publice permise, Listă de proxy HTTP furnizează candidați pentru acel URL de proxy.
Callback-ul rulează înainte de verificarea CONNECT pentru un 200 reușit, deci poate observa și 407. Nil continuă verificarea normală și nu acceptă un tunel respins; o eroare face cererea să eșueze.
X-Proxy-Region este un exemplu definit de furnizor. Citiți aici starea și anteturile și lăsați proprietatea asupra corpului și socket-ului la Transport, care se ocupă apoi de TLS-ul destinației.
Aceasta observă stabilirea unui tunel nou, nu fiecare cerere. O conexiune reutilizată nu are un nou răspuns CONNECT, iar răspunsul site-ului are anteturi separate.