Դիտարկել Go-ի CONNECT կարգավիճակը OnProxyConnectResponse-ում
Տեղադրեք կարթը 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 URL-ի համար։
Callback-ը գործարկվում է նախքան CONNECT-ի ստուգումը հաջող 200-ի համար, ուստի այն կարող է դիտարկել նաև 407։ Nil-ը շարունակում է սովորական ստուգումը և չի ընդունում մերժված թունել; սխալը ձախողում է հարցումը։
X-Proxy-Region մատակարարի կողմից սահմանված օրինակ է։ Կարդացեք կարգավիճակը և վերնագրերը այստեղ, իսկ մարմնի և socket-ի սեփականությունը թողեք Transport-ին, որն այնուհետև զբաղվում է նպատակակետի TLS-ով։
Սա դիտարկում է նոր թունելի ստեղծումը, ոչ թե յուրաքանչյուր հարցում։ Վերօգտագործված կապը նոր CONNECT պատասխան չունի, իսկ կայքի պատասխանն ունի առանձին վերնագրեր։