OnProxyConnectResponse дотор Go-ийн CONNECT төлөвийг ажиглах
Хүсэлтүүдийн өмнө transport дээр hook суулгана; 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 хариу байхгүй, вэбсайтын хариултад тусдаа толгойнууд байна.