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 စာရင်း သည် ထို proxy URL အတွက် ကိုယ်စားလှယ်လောင်းများကို ပေးသည်။
Callback သည် CONNECT ကို အောင်မြင်သော 200 အတွက် မစစ်ဆေးမီ လုပ်ဆောင်သောကြောင့် 407 ကိုလည်း စောင့်ကြည့်နိုင်သည်။ Nil သည် ပုံမှန် စစ်ဆေးမှုကို ဆက်လုပ်ပြီး ငြင်းပယ်ခံရသော tunnel ကို လက်မခံပါ; အမှားတစ်ခုက တောင်းဆိုမှုကို မအောင်မြင်စေသည်။
X-Proxy-Region သည် ဝန်ဆောင်မှုပေးသူ သတ်မှတ်ထားသော ဥပမာဖြစ်သည်။ ဤနေရာတွင် အခြေအနေနှင့် ခေါင်းစီးများကို ဖတ်ပြီး body နှင့် socket ပိုင်ဆိုင်မှုကို Transport ထံ ထားခဲ့ပါ; ၎င်းက နောက်ပိုင်း ဦးတည်ရာ TLS ကို ကိုင်တွယ်သည်။
ဤသည် တောင်းဆိုမှုတိုင်းမဟုတ်ဘဲ tunnel အသစ် တည်ဆောက်မှုကို စောင့်ကြည့်သည်။ ပြန်လည်အသုံးပြုထားသော ချိတ်ဆက်မှုတွင် CONNECT တုံ့ပြန်မှုအသစ် မရှိပါ၊ ဝဘ်ဆိုက်၏ တုံ့ပြန်မှုတွင် သီးခြား ခေါင်းစီးများ ရှိသည်။