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 সরবরাহকারী-নির্ধারিত একটি উদাহরণ। এখানে স্ট্যাটাস ও হেডার পড়ুন এবং বডি ও সকেটের মালিকানা Transport-এর কাছে রাখুন, যা পরে গন্তব্য TLS সামলায়।
এটি নতুন টানেল স্থাপন পর্যবেক্ষণ করে, প্রতিটি অনুরোধ নয়। পুনরায় ব্যবহৃত সংযোগে নতুন CONNECT প্রতিক্রিয়া থাকে না, আর ওয়েবসাইটের প্রতিক্রিয়ার হেডার আলাদা।