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 הזו.

ה-callback רץ לפני בדיקת CONNECT עבור 200 מוצלח, ולכן הוא יכול לצפות גם ב-407. nil ממשיך את הבדיקה הרגילה ואינו מקבל מנהרה שנדחתה; שגיאה מכשילה את הבקשה.

X-Proxy-Region הוא דוגמה שמוגדרת על ידי הספק. קראו כאן סטטוס וכותרות והשאירו את הבעלות על הגוף וה-socket ל-Transport, שמטפל לאחר מכן ב-TLS של היעד.

זה צופה בהקמת מנהרה חדשה, לא בכל בקשה. לחיבור בשימוש חוזר אין תגובת CONNECT חדשה, ולתגובת האתר יש כותרות נפרדות.

מאמרים קשורים