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 — прыклад, вызначаны пастаўшчыком. Чытайце тут статус і загалоўкі, а валоданне целам і сокетам пакіньце Transport, які затым апрацоўвае TLS прызначэння.

Гэта назірае за стварэннем новага тунеля, а не за кожным запытам. Паўторна выкарыстанае злучэнне не мае новага адказу CONNECT, а адказ сайта мае асобныя загалоўкі.

Падобныя артыкулы