Пратите Go CONNECT статус у OnProxyConnectResponse
Инсталирајте куку на транспорт пре захтева; враћање 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 прокси сервера даје кандидате за тај proxy URL.
Повратни позив се извршава пре провере CONNECT-а на успешан 200, па може приметити и 407. Nil наставља уобичајену проверу и не прихвата одбијени тунел; грешка обара захтев.
X-Proxy-Region је пример који дефинише провајдер. Читајте статус и заглавља овде, а власништво над телом и socket-ом оставите Transport-у, који затим обрађује TLS одредишта.
Ово прати успостављање новог тунела, не сваки захтев. Поново коришћена веза нема нови CONNECT одговор, а одговор веб странице има засебна заглавља.