לצפות במצב ה-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 הזו.
ה-callback רץ לפני בדיקת CONNECT עבור 200 מוצלח, ולכן הוא יכול לצפות גם ב-407. nil ממשיך את הבדיקה הרגילה ואינו מקבל מנהרה שנדחתה; שגיאה מכשילה את הבקשה.
X-Proxy-Region הוא דוגמה שמוגדרת על ידי הספק. קראו כאן סטטוס וכותרות והשאירו את הבעלות על הגוף וה-socket ל-Transport, שמטפל לאחר מכן ב-TLS של היעד.
זה צופה בהקמת מנהרה חדשה, לא בכל בקשה. לחיבור בשימוש חוזר אין תגובת CONNECT חדשה, ולתגובת האתר יש כותרות נפרדות.