Γιατί η Java επέλεξε έναν διακομιστή μεσολάβησης SOCKS για το αίτημα HTTP σας
Εξετάστε το αποτέλεσμα του ProxySelector και τις ενεργές ρυθμίσεις JVM πριν εφαρμόσετε παλιές λύσεις proxy των Windows.
Ένα αίτημα Java μπορεί να συναντήσει πολλές πηγές proxy: ρητή διαμόρφωση πελάτη, τον προεπιλεγμένο επιλογέα, ιδιότητες δικτύου της JVM και υποστηριζόμενες ρυθμίσεις του λειτουργικού συστήματος. Όταν ένα αρχείο καταγραφής αναφέρει απροσδόκητα SOCKS, προσδιορίστε ποια πηγή το επέλεξε.
Για κώδικα που χρησιμοποιεί τον προεπιλεγμένο επιλογέα, εξετάστε την απόφαση για τον ακριβή προορισμό:
URI target = URI.create("https://example.com/");
ProxySelector selector = ProxySelector.getDefault();
if (selector != null) {
System.out.println(selector.select(target));
}
Αυτό αναφέρει τους υποψηφίους του επιλογέα. Δεν αποδεικνύει ποια σύνδεση τελικά πέτυχε, και ένας πελάτης με τη δική του ρητή διαδρομή μπορεί να κάνει διαφορετική επιλογή.
Ελέγξτε τις ενεργές ρυθμίσεις
Ελέγξτε τα http.proxyHost, https.proxyHost, socksProxyHost, τις θύρες τους και το java.net.useSystemProxies. Η τεκμηρίωση ιδιοτήτων δικτύου του JDK περιγράφει το εύρος και την προτεραιότητά τους. Η ανακάλυψη proxy του συστήματος ελέγχεται κατά την εκκίνηση· ορίστε την σκόπιμα κατά την εκκίνηση της JVM.
Οι ιστορικές απαντήσεις περιγράφουν συγκεκριμένους συνδυασμούς παλιών διαλόγων των Windows και παλιών JDK. Αυτές οι αναφορές μπορούν να εξηγήσουν την προέλευση μιας λύσης, αλλά δεν αποδεικνύουν ότι ένα τρέχον περιβάλλον εκτέλεσης έχει το ίδιο σφάλμα. Καταγράψτε την έκδοση του περιβάλλοντος εκτέλεσης και την έξοδο του επιλογέα πριν αλλάξετε ρυθμίσεις του λειτουργικού συστήματος για κάθε εφαρμογή.
Εάν η εφαρμογή χρειάζεται proxy HTTP για έναν πελάτη, μια ρητή διαμόρφωση proxy μπορεί να κάνει αυτή την απαίτηση σαφέστερη. Εάν χρειάζεται κεντρική αυτόματη δρομολόγηση, ερευνήστε γιατί ο επιλογέας έλαβε ή επέστρεψε την απροσδόκητη καταχώριση SOCKS.
Ένας προσαρμοσμένος επιλογέας θα πρέπει να διατηρεί τις σκόπιμες παρακάμψεις και τον χειρισμό αστοχιών. Το φιλτράρισμα όλων των υποψηφίων SOCKS χωρίς διάκριση μπορεί να διακόψει συνδέσεις που έπρεπε να χρησιμοποιούν έναν. Διορθώστε τον εσφαλμένο κανόνα με το μικρότερο εύρος που μπορείτε να προσδιορίσετε.