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