Amati Status CONNECT Go di OnProxyConnectResponse
Pasang hook pada transport sebelum permintaan; mengembalikan nil mempertahankan pemeriksaan status tunnel normalnya.
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}Gunakan context, net/http, dan net/url; asersi tipe standar mengasumsikan transport tersebut tetap terpasang. proxyURL diurai, dan observeConnect harus aman terhadap konkurensi. Untuk probe HTTPS publik yang diizinkan, Daftar proxy HTTP menyediakan kandidat untuk URL proxy tersebut.
Callback berjalan sebelum memeriksa CONNECT untuk 200 yang berhasil, sehingga juga dapat mengamati 407. Nil melanjutkan pemeriksaan normal dan tidak menerima tunnel yang ditolak; kesalahan membuat permintaan gagal.
X-Proxy-Region adalah contoh yang ditentukan penyedia. Baca status dan header di sini dan serahkan kepemilikan body serta socket kepada Transport, yang kemudian menangani TLS tujuan.
Ini mengamati penyiapan tunnel baru, bukan setiap permintaan. Koneksi yang dipakai ulang tidak memiliki respons CONNECT baru, dan respons situs web memiliki header terpisah.