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 مرشّحين لعنوان الوكيل ذلك.

يعمل رد النداء قبل فحص CONNECT من أجل 200 ناجحة، لذا يمكنه رصد 407 أيضًا. يتابع nil الفحص المعتاد ولا يقبل نفقًا مرفوضًا؛ أما الخطأ فيُفشل الطلب.

X-Proxy-Region مثال يحدده المزوّد. اقرأ الحالة والترويسات هنا واترك ملكية الجسم والمقبس لـ Transport، الذي يتولى بعد ذلك TLS الوجهة.

هذا يراقب إعداد نفق جديد، لا كل طلب. الاتصال المعاد استخدامه ليس له استجابة CONNECT جديدة، واستجابة الموقع لها ترويسات منفصلة.

مقالات ذات صلة