សង្កេតស្ថានភាព CONNECT របស់ Go ក្នុង OnProxyConnectResponse
ដំឡើង hook នៅលើ transport មុនពេលសំណើ; ការត្រឡប់ 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; ការអះអាងប្រភេទស្តង់ដារសន្មតថា transport នោះនៅតែត្រូវបានដំឡើង។ proxyURL ត្រូវបានញែកវិភាគ ហើយ observeConnect ត្រូវតែមានសុវត្ថិភាពចំពោះភាពព្រមព្រៀងគ្នា។ សម្រាប់ការសាកល្បង HTTPS សាធារណៈដែលបានអនុញ្ញាត បញ្ជី HTTP proxy ផ្តល់បេក្ខជនសម្រាប់ proxy URL នោះ។
Callback ដំណើរការមុនពេលពិនិត្យ CONNECT សម្រាប់ 200 ជោគជ័យ ដូច្នេះវាអាចសង្កេតឃើញ 407 ផងដែរ។ Nil បន្តការពិនិត្យធម្មតា ហើយមិនទទួលយកផ្លូវរូងដែលត្រូវបានបដិសេធទេ; កំហុសធ្វើឱ្យសំណើបរាជ័យ។
X-Proxy-Region គឺជាឧទាហរណ៍ដែលកំណត់ដោយអ្នកផ្តល់សេវា។ អានស្ថានភាព និងក្បាលនៅទីនេះ ហើយទុកកម្មសិទ្ធិតួ និង socket ឱ្យ Transport ដែលបន្ទាប់មកគ្រប់គ្រង TLS គោលដៅ។
នេះសង្កេតការបង្កើតផ្លូវរូងថ្មី មិនមែនរាល់សំណើទេ។ ការតភ្ជាប់ដែលប្រើឡើងវិញមិនមានការឆ្លើយតប CONNECT ថ្មីទេ ហើយការឆ្លើយតបរបស់គេហទំព័រមានក្បាលដាច់ដោយឡែក។