สังเกตสถานะ 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 response ใหม่ และ response ของเว็บไซต์มี headers แยกต่างหาก