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 प्रदाता-परिभाषित उदाहरण है। यहाँ स्थिति और हेडर पढ़ें और बॉडी तथा सॉकेट का स्वामित्व Transport को छोड़ें, जो फिर गंतव्य TLS संभालता है।

यह नई टनल स्थापना देखता है, हर अनुरोध नहीं। पुनः उपयोग किए गए कनेक्शन में नया CONNECT प्रतिक्रिया नहीं होता, और वेबसाइट की प्रतिक्रिया के हेडर अलग होते हैं।

संबंधित लेख