Επίλυση του ERR_TUNNEL_CONNECTION_FAILED με proxy
Updated:
Για τη φόρτωση μιας σελίδας https:// μέσω proxy, το πρόγραμμα περιήγησης στέλνει ένα αίτημα CONNECT και περιμένει από το proxy να ανοίξει ένα tunnel προς τον ιστότοπο. Το ERR_TUNNEL_CONNECTION_FAILED εμφανίζεται όταν το proxy απαντά σε αυτό το αίτημα με σφάλμα αντί για επιβεβαίωση. Η δυσκολία είναι ότι το Chrome δεν αναφέρει ποιο είναι το σφάλμα, επομένως το πρώτο βήμα είναι να βρείτε τον πραγματικό κωδικό.
Δύο περιπτώσεις που αναπαραγάγαμε
Και τα δύο εκτελέστηκαν σε δοκιμαστικό proxy, που αναγράφεται εδώ με τη διεύθυνση τεκμηρίωσης 203.0.113.10:8080 και user123:pass456. Σε ένα κανονικό παράθυρο Chrome, η περίπτωση 407 δεν καταλήγει σε σφάλμα tunnel· αντίθετα, το Chrome ανοίγει ένα παράθυρο σύνδεσης για το όνομα χρήστη και τον κωδικό πρόσβασης του proxy. Επομένως, τα σφάλματα tunnel που οφείλονται σε 407 εμφανίζονται κυρίως σε εργαλεία αυτοματισμού και σε εφαρμογές που δεν μπορούν να ζητήσουν κωδικό πρόσβασης.
| Το proxy απαντά στο CONNECT με | Το Chrome εμφανίζει | Το curl εμφανίζει |
|---|---|---|
407 χωρίς δυνατότητα εισαγωγής κωδικού πρόσβασης (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502 επειδή το proxy δεν μπορεί να συνδεθεί στον ιστότοπο | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Αιτίες, κατά σειρά πιθανότητας
- Ένα script αυτοματισμού δεν στέλνει διαπιστευτήρια. Η παράμετρος
--proxy-serverτου Chrome δέχεται μόνο host και port, όχι user:pass. Το headless Puppeteer ή Selenium λαμβάνει 407 και αναφέρει αποτυχία tunnel. - Εφαρμογή τηλεφώνου πίσω από proxy Wi-Fi με κωδικό πρόσβασης. Η εφαρμογή δεν διαθέτει παράθυρο σύνδεσης, οπότε το HTTPS διακόπτεται ενώ το πρόγραμμα περιήγησης συνεχίζει να λειτουργεί.
- Το proxy δεν μπορεί να φτάσει στον προορισμό. Επιστρέφει 502 στο CONNECT· η σελίδα 502 Bad Gateway καλύπτει αυτό το ζήτημα αναλυτικά.
- Αποτυγχάνουν μόνο ορισμένοι ιστότοποι. Ο προορισμός αποκλείει τη σύνδεση ή είναι εκτός λειτουργίας, ενώ άλλοι ιστότοποι λειτουργούν κανονικά μέσω του ίδιου proxy.
Βρείτε τον πραγματικό κωδικό με μία εντολή curl
Εκτελέστε την εντολή curl -v -x http://user123:[email protected]:8080 https://example.com με τις δικές σας τιμές. Κοιτάξτε τη γραμμή ακριβώς μετά το > CONNECT example.com:443 HTTP/1.1: ένας κωδικός 407 σημαίνει ότι πρέπει να ακολουθήσετε τον οδηγό για το 407· ένας κωδικός 502 υποδεικνύει πρόβλημα στον προορισμό ή στη διαδρομή πίσω από το proxy. Αν προτιμάτε να μην χρησιμοποιήσετε τερματικό, επικολλήστε τη γραμμή στο εργαλείο ελέγχου proxy, το οποίο αναφέρει auth failed (407) ή HTTP 502 για τις ίδιες περιπτώσεις.
Λύσεις ανά περιβάλλον
- Puppeteer: διατηρήστε το
--proxy-server=http://host:portκατά την εκκίνηση και καλέστε τοpage.authenticate({ username, password })πριν από την πλοήγηση. Πλήρες παράδειγμα στον οδηγό proxy για Puppeteer. - Playwright: ορίστε το
proxy: { server, username, password }κατά την εκκίνηση του προγράμματος περιήγησης και το Playwright διαχειρίζεται αυτόματα το 407 για εσάς· δείτε το Playwright. - Selenium: Το Chrome δεν δέχεται user:pass στη γραμμή εντολών· ο οδηγός Selenium παρουσιάζει τις διαθέσιμες επιλογές.
- Chrome σε Windows: αν το παράθυρο σύνδεσης δεν εμφανίζεται ποτέ, ελέγξτε αν κάποια επέκταση proxy το αποκλείει και δοκιμάστε ξανά σε ένα παράθυρο χωρίς επεκτάσεις.
- Κινητά τηλέφωνα: για εφαρμογές που απαιτούν proxy με έλεγχο ταυτότητας, χρησιμοποιήστε μια εφαρμογή proxy που υποστηρίζει user:pass όπως περιγράφεται στον οδηγό ρύθμισης για Android.
Βήμα προς βήμα
- 1
Εντοπίστε την απόκριση του CONNECT
Εκτελέστε το
curl -v -xμε τη γραμμή του proxy σας ή επικολλήστε τη στο εργαλείο ελέγχου για να διαπιστώσετε αν το proxy επιστρέφει 407 ή 502. - 2
Για το 407: εισαγάγετε σωστά τα διαπιστευτήρια
Στα scripts, χρησιμοποιήστε το hook ελέγχου ταυτότητας της βιβλιοθήκης αντί να τοποθετείτε το user:pass στο
--proxy-server. - 3
Για το 502: δοκιμάστε άλλον ιστότοπο
Φορτώστε έναν μεγάλο ιστότοπο όπως το example.com μέσω του ίδιου proxy. Αν λειτουργεί, το πρόβλημα εντοπίζεται στον αρχικό προορισμό.
- 4
Εκτελέστε ξανά και επιβεβαιώστε την IP εξόδου
Μόλις ανοίξει το tunnel, επισκεφθείτε τη σελίδα η IP μου στο ίδιο πρόγραμμα περιήγησης για να επιβεβαιώσετε ότι η κίνηση διέρχεται από το proxy.
Συχνές ερωτήσεις
Γιατί οι σελίδες http φορτώνουν ενώ οι σελίδες https αποτυγχάνουν;
Το απλό http δεν απαιτεί CONNECT· το proxy προωθεί το αίτημα απευθείας. Μόνο το https ανοίγει tunnel, επομένως τα σφάλματα tunnel εμφανίζονται μόνο εκεί.
Τι προκαλεί το ERR_TUNNEL_CONNECTION_FAILED σε Android;
Συχνότερα μια εφαρμογή που δεν μπορεί να μεταβιβάσει το όνομα χρήστη και τον κωδικό πρόσβασης σε ένα proxy Wi-Fi. Δοκιμάστε την ίδια σελίδα στο Chrome για Android· αν το Chrome ζητά στοιχεία και τη φορτώνει, το πρόβλημα είναι η εφαρμογή.
Μπορώ να βάλω το user:pass μέσα στο --proxy-server;
Όχι. Το Chrome αγνοεί τα διαπιστευτήρια σε αυτήν την παράμετρο, γεγονός που οδηγεί σε 407 και στο σφάλμα tunnel. Αντ' αυτού, πραγματοποιήστε έλεγχο ταυτότητας μέσω Puppeteer, Playwright ή κάποιας επέκτασης.
Θα επιλύσει το σφάλμα tunnel η αλλαγή σε SOCKS5;
Μόνο αν η παραγγελία σας αφορά SOCKS5. Το VinaProxy προσφέρει τόσο HTTP(S) όσο και SOCKS5· επιλέξτε το πρωτόκολλο που εμφανίζεται στην παραγγελία σας στον πίνακα ελέγχου, καθώς η αναντιστοιχία προκαλεί διαφορετικά σφάλματα.
Proxies που λειτουργούν με Puppeteer και Playwright
Τα proxies του VinaProxy χρησιμοποιούν τυπική σύνδεση user:pass, την οποία οι δημοφιλείς βιβλιοθήκες αυτοματισμού υποστηρίζουν άμεσα.
Δείτε τις τιμές