Παρατηρήστε την κατάσταση CONNECT της Go στο OnProxyConnectResponse
Εγκαταστήστε το hook στο transport πριν από τα αιτήματα· η επιστροφή 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· η τυπική δήλωση τύπου υποθέτει ότι αυτό το transport παραμένει εγκατεστημένο. Το proxyURL αναλύεται και το observeConnect πρέπει να είναι ασφαλές ως προς τον παραλληλισμό. Για επιτρεπόμενες δημόσιες δοκιμές HTTPS, το Λίστα διακομιστών μεσολάβησης HTTP παρέχει υποψηφίους για αυτό το proxy URL.
Το callback εκτελείται πριν από τον έλεγχο CONNECT για επιτυχές 200, οπότε μπορεί να παρατηρήσει και 407. Το nil συνεχίζει τον κανονικό έλεγχο και δεν δέχεται μια απορριφθείσα σήραγγα· ένα σφάλμα αποτυγχάνει το αίτημα.
Το X-Proxy-Region είναι ένα παράδειγμα που ορίζει ο πάροχος. Διαβάστε εδώ κατάσταση και headers και αφήστε την κυριότητα του body και του socket στο Transport, το οποίο μετά χειρίζεται το TLS του προορισμού.
Αυτό παρατηρεί τη δημιουργία νέας σήραγγας, όχι κάθε αίτημα. Μια επαναχρησιμοποιημένη σύνδεση δεν έχει νέα απόκριση CONNECT και η απόκριση του ιστότοπου έχει ξεχωριστά headers.