OnProxyConnectResponse లో Go యొక్క CONNECT స్థితిని గమనించండి
అభ్యర్థనలకు ముందు transport పై hook ఇన్స్టాల్ చేయండి; nil తిరిగి ఇవ్వడం దాని సాధారణ tunnel-స్థితి తనిఖీని కాపాడుతుంది.
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 ఉపయోగించండి; ప్రామాణిక-డిఫాల్ట్ రకం వాదన ఆ transport ఇన్స్టాల్ చేయబడి ఉంటుందని ఊహిస్తుంది. proxyURL విశ్లేషించబడుతుంది, observeConnect సమకాలీనతకు సురక్షితంగా ఉండాలి. అనుమతించబడిన పబ్లిక్ HTTPS పరీక్షల కోసం HTTP ప్రాక్సీ జాబితా ఆ proxy URL కోసం అభ్యర్థులను అందిస్తుంది.
కాల్బ్యాక్ CONNECT విజయవంతమైన 200 కోసం తనిఖీ చేయడానికి ముందు నడుస్తుంది, కాబట్టి ఇది 407ని కూడా గమనించగలదు. nil సాధారణ తనిఖీని కొనసాగిస్తుంది మరియు తిరస్కరించబడిన tunnelని అంగీకరించదు; లోపం అభ్యర్థనను విఫలం చేస్తుంది.
X-Proxy-Region ప్రదాత-నిర్వచిత ఉదాహరణ. ఇక్కడ స్థితి మరియు హెడర్లను చదవండి మరియు body మరియు socket యాజమాన్యాన్ని Transportకు వదిలేయండి, అది తర్వాత గమ్యస్థాన TLSని నిర్వహిస్తుంది.
ఇది కొత్త tunnel సెటప్ను గమనిస్తుంది, ప్రతి అభ్యర్థనను కాదు. తిరిగి ఉపయోగించిన కనెక్షన్కు కొత్త CONNECT ప్రతిస్పందన ఉండదు, మరియు వెబ్సైట్ ప్రతిస్పందనకు వేర్వేరు హెడర్లు ఉంటాయి.