OnProxyConnectResponse-ൽ Go-യുടെ CONNECT നില നിരീക്ഷിക്കുക
അഭ്യർത്ഥനകൾക്ക് മുമ്പ് ട്രാൻസ്പോർട്ടിൽ ഹുക്ക് ഇൻസ്റ്റാൾ ചെയ്യുക; nil തിരികെ നൽകുന്നത് അതിന്റെ സാധാരണ ടണൽ-നില പരിശോധന നിലനിർത്തുന്നു.
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}context, net/http, net/url എന്നിവ ഉപയോഗിക്കുക; സ്റ്റാൻഡേർഡ്-ഡിഫോൾട്ട് ടൈപ്പ് അസർഷൻ ആ ട്രാൻസ്പോർട്ട് ഇൻസ്റ്റാൾ ചെയ്തതായി തുടരുമെന്ന് അനുമാനിക്കുന്നു. proxyURL പാഴ്സ് ചെയ്യപ്പെടുന്നു, observeConnect സമകാലികതയ്ക്ക് സുരക്ഷിതമായിരിക്കണം. അനുവദനീയമായ പൊതു HTTPS പരിശോധനകൾക്ക് HTTP പ്രോക്സി പട്ടിക ആ പ്രോക്സി URL-ന് സ്ഥാനാർത്ഥികൾ നൽകുന്നു.
CONNECT വിജയകരമായ 200 ആണോ എന്ന് പരിശോധിക്കുന്നതിന് മുമ്പ് കോൾബാക്ക് പ്രവർത്തിക്കുന്നു, അതിനാൽ 407-ഉം നിരീക്ഷിക്കാം. nil സാധാരണ പരിശോധന തുടരുകയും നിരസിക്കപ്പെട്ട ടണൽ സ്വീകരിക്കാതിരിക്കുകയും ചെയ്യുന്നു; പിശക് അഭ്യർത്ഥന പരാജയപ്പെടുത്തുന്നു.
X-Proxy-Region ദാതാവ് നിർവചിച്ച ഒരു ഉദാഹരണമാണ്. ഇവിടെ നിലയും ഹെഡറുകളും വായിക്കുക, ബോഡിയുടെയും socket-ന്റെയും ഉടമസ്ഥത Transport-ന് വിടുക; അത് പിന്നീട് ലക്ഷ്യത്തിന്റെ TLS കൈകാര്യം ചെയ്യുന്നു.
ഇത് പുതിയ ടണൽ സ്ഥാപനം നിരീക്ഷിക്കുന്നു, ഓരോ അഭ്യർത്ഥനയുമല്ല. പുനരുപയോഗിച്ച കണക്ഷന് പുതിയ CONNECT പ്രതികരണമില്ല, വെബ്സൈറ്റിന്റെ പ്രതികരണത്തിന് വെവ്വേറെ ഹെഡറുകളുണ്ട്.