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

Поврзани статии