วิธีแก้ไข ERR_TUNNEL_CONNECTION_FAILED เมื่อใช้งานผ่านพร็อกซี
อัปเดตเมื่อ:
ในการโหลดหน้าเว็บ https:// ผ่านพร็อกซี เบราว์เซอร์จะส่งคำขอ CONNECT และรอให้พร็อกซีเปิดอุโมงค์เชื่อมต่อไปยังเว็บไซต์ ข้อผิดพลาด ERR_TUNNEL_CONNECTION_FAILED จะปรากฏขึ้นเมื่อพร็อกซีตอบกลับคำขอนั้นด้วยข้อผิดพลาดแทนที่จะยอมรับ แต่ประเด็นคือ Chrome ไม่ได้บอกว่าเป็นข้อผิดพลาดใด ดังนั้นขั้นตอนแรกคือการหาโค้ดข้อผิดพลาดที่แท้จริง
สองกรณีที่เราจำลองข้อผิดพลาดได้
ทั้งสองกรณีทดสอบกับพร็อกซีจำลอง โดยระบุที่อยู่ในคู่มือนี้เป็น 203.0.113.10:8080 และ user123:pass456 สำหรับหน้าต่าง Chrome ปกติ กรณี 407 จะไม่กลายเป็นข้อผิดพลาดของอุโมงค์ แต่ Chrome จะเปิดกล่องข้อความให้ลงชื่อเข้าใช้เพื่อกรอกชื่อผู้ใช้และรหัสผ่านของพร็อกซีแทน ดังนั้นข้อผิดพลาดของอุโมงค์ที่เกิดจาก 407 จึงมักพบในเครื่องมือ automation และในแอปที่ไม่สามารถแสดงหน้าต่างถามรหัสผ่านได้
| พร็อกซีตอบกลับ CONNECT ด้วย | Chrome แสดง | curl แสดง |
|---|---|---|
407 โดยไม่มีช่องทางให้กรอกรหัสผ่าน (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502 เนื่องจากพร็อกซีไม่สามารถเชื่อมต่อไปยังเว็บไซต์ได้ | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
สาเหตุที่พบบ่อยที่สุดตามลำดับ
- สคริปต์ automation ไม่ได้ส่งข้อมูลยืนยันตัวตน แฟล็ก
--proxy-serverของ Chrome รองรับเฉพาะ host และ port เท่านั้น ไม่รองรับ user:pass ทำให้ Puppeteer หรือ Selenium แบบ headless ได้รับรหัส 407 และแจ้งข้อผิดพลาดของอุโมงค์เชื่อมต่อ - แอปบนมือถือทำงานหลังพร็อกซี Wi-Fi ที่ต้องใช้รหัสผ่าน ตัวแอปไม่มีหน้าต่างเข้าสู่ระบบ ทำให้การเชื่อมต่อ HTTPS ใช้งานไม่ได้ แม้ว่าเบราว์เซอร์จะยังใช้งานได้ตามปกติ
- พร็อกซีไม่สามารถเชื่อมต่อไปยังปลายทางได้ พร็อกซีจะตอบกลับ CONNECT ด้วย 502 สามารถดูรายละเอียดเชิงลึกได้ที่หน้า 502 Bad Gateway
- ใช้งานไม่ได้เฉพาะบางเว็บไซต์ เว็บไซต์ปลายทางบล็อกการเชื่อมต่อหรือระบบล่ม ขณะที่เว็บไซต์อื่นยังใช้งานผ่านพร็อกซีเดียวกันได้ตามปกติ
ค้นหาโค้ดที่แท้จริงด้วยคำสั่ง curl เพียงคำสั่งเดียว
รันคำสั่ง curl -v -x http://user123:[email protected]:8080 https://example.com โดยแทนที่ด้วยข้อมูลของคุณ สังเกตบรรทัดถัดจาก > CONNECT example.com:443 HTTP/1.1 หากได้ 407 ให้ทำตามคู่มือ 407 แต่ถ้าได้ 502 แสดงว่ามีปัญหาที่ปลายทางหรือเส้นทางเครือข่ายหลังพร็อกซี หากไม่สะดวกใช้เทอร์มินัล สามารถวางข้อมูลลงในเครื่องมือตรวจสอบพร็อกซี ซึ่งจะแสดงผล auth failed (407) หรือ HTTP 502 ในกรณีเดียวกันนี้
วิธีแก้ไขตามสภาพแวดล้อมการใช้งาน
- Puppeteer: คงค่า
--proxy-server=http://host:portไว้ตอนเปิดเบราว์เซอร์ และเรียกใช้page.authenticate({ username, password })ก่อนนำทางไปยังหน้าเว็บ ดูตัวอย่างฉบับเต็มได้ที่คู่มือตั้งค่าพร็อกซี Puppeteer - Playwright: ส่งค่า
proxy: { server, username, password }ตอนเปิดเบราว์เซอร์ แล้ว Playwright จะจัดการตอบกลับรหัส 407 ให้โดยอัตโนมัติ ดูเพิ่มเติมที่ Playwright - Selenium: Chrome ไม่รองรับการใส่ user:pass ผ่าน command line ดูแนวทางแก้ไขที่ใช้งานได้ในคู่มือ Selenium
- Chrome บน Windows: หากกล่องข้อความลงชื่อเข้าใช้ไม่ปรากฏขึ้น ให้ตรวจสอบว่ามีส่วนขยายพร็อกซีบล็อกอยู่หรือไม่ จากนั้นลองเปิดใหม่อีกครั้งในหน้าต่างที่ไม่มีส่วนขยาย
- โทรศัพท์มือถือ: สำหรับแอปที่ต้องใช้พร็อกซีที่มีการยืนยันตัวตน ให้ใช้แอปพร็อกซีที่รองรับ user:pass ตามที่อธิบายไว้ในคู่มือการตั้งค่า Android
ขั้นตอนทีละขั้น
- 1
ตรวจสอบการตอบกลับของ CONNECT
รัน
curl -v -xพร้อมข้อมูลพร็อกซีของคุณ หรือวางลงในเครื่องมือตรวจสอบ เพื่อดูว่าพร็อกซีส่งคืนรหัส 407 หรือ 502 - 2
สำหรับ 407: ระบุข้อมูลยืนยันตัวตนให้ถูกต้อง
ในสคริปต์ ให้ใช้ฟังก์ชันยืนยันตัวตนของไลบรารีแทนการใส่ user:pass ลงใน
--proxy-server - 3
สำหรับ 502: ลองเข้าเว็บไซต์อื่น
ลองโหลดเว็บไซต์ขนาดใหญ่อย่าง example.com ผ่านพร็อกซีเดียวกัน หากเข้าได้ตามปกติ แสดงว่าปัญหาเกิดจากเว็บไซต์ปลายทางเดิม
- 4
รันใหม่อีกครั้งและยืนยัน IP ขาออก
เมื่ออุโมงค์เชื่อมต่อเปิดแล้ว ให้เข้าไปที่ my IP บนเบราว์เซอร์เดิมเพื่อยืนยันว่าการรับส่งข้อมูลผ่านพร็อกซีเรียบร้อยแล้ว
คำถามที่พบบ่อย
ทำไมหน้าเว็บแบบ http โหลดได้ แต่ https ถึงโหลดไม่ผ่าน?
เว็บแบบ http ธรรมดาไม่จำเป็นต้องใช้ CONNECT โดยพร็อกซีจะส่งต่อคำขอให้โดยตรง มีเพียง https เท่านั้นที่ต้องเปิดอุโมงค์เชื่อมต่อ ข้อผิดพลาดเกี่ยวกับอุโมงค์จึงเกิดขึ้นเฉพาะกับ https
อะไรคือสาเหตุของ ERR_TUNNEL_CONNECTION_FAILED บน Android?
สาเหตุที่พบบ่อยที่สุดคือตัวแอปไม่สามารถส่งชื่อผู้ใช้และรหัสผ่านไปยังพร็อกซี Wi-Fi ได้ ให้ลองเปิดหน้านั้นใน Chrome สำหรับ Android หาก Chrome สามารถแสดงหน้าต่างถามข้อมูลและโหลดหน้าเว็บได้ ปัญหาก็มาจากตัวแอป
สามารถใส่ user:pass ใน --proxy-server ได้หรือไม่?
ไม่ได้ Chrome จะละเว้นข้อมูลยืนยันตัวตนในแฟล็กดังกล่าว ซึ่งทำให้เกิดรหัส 407 และข้อผิดพลาดของอุโมงค์เชื่อมต่อ แนะนำให้ยืนยันตัวตนผ่าน Puppeteer, Playwright หรือใช้ส่วนขยายแทน
การเปลี่ยนไปใช้ SOCKS5 จะช่วยแก้ข้อผิดพลาดของอุโมงค์เชื่อมต่อได้หรือไม่?
ช่วยได้ก็ต่อเมื่อแพ็กเกจที่คุณสั่งซื้อเป็นแบบ SOCKS5 เท่านั้น โดย VinaProxy ให้บริการทั้ง HTTP(S) และ SOCKS5 โปรดเลือกโปรโตคอลตามที่แสดงในแดชบอร์ดคำสั่งซื้อของคุณ เนื่องจากการเลือกไม่ตรงกันจะทำให้เกิดข้อผิดพลาดอื่นแทน
พร็อกซีที่ใช้งานร่วมกับ Puppeteer และ Playwright ได้อย่างสมบูรณ์แบบ
พร็อกซีของ VinaProxy รองรับการเข้าสู่ระบบด้วย user:pass มาตรฐาน ซึ่งไลบรารี automation ยอดนิยมรองรับได้ทันทีโดยไม่ต้องตั้งค่าเพิ่มเติม
ดูราคา