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 प्रतिसाद नसतो, आणि वेबसाइटच्या प्रतिसादाचे हेडर वेगळे असतात.

संबंधित लेख