Набљудувајте го CONNECT статусот на Go во 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 одговор, а одговорот на веб-страницата има одделни заглавија.