Żądanie Java może napotkać kilka źródeł proxy: jawną konfigurację klienta, domyślny selektor, właściwości sieciowe JVM oraz obsługiwane ustawienia systemu operacyjnego. Gdy log niespodziewanie wspomina o SOCKS, ustal, które źródło go wybrało.

W przypadku kodu korzystającego z domyślnego selektora sprawdź decyzję dla dokładnego celu:

URI target = URI.create("https://example.com/");
ProxySelector selector = ProxySelector.getDefault();
if (selector != null) {
    System.out.println(selector.select(target));
}

To raportuje kandydatów selektora. Nie dowodzi, które połączenie ostatecznie się powiodło, a klient z własną jawną trasą może dokonać innego wyboru.

Sprawdź efektywne ustawienia

Przejrzyj http.proxyHost, https.proxyHost, socksProxyHost, ich porty oraz java.net.useSystemProxies. Dokumentacja właściwości sieciowych JDK opisuje ich zakres i pierwszeństwo. Wykrywanie proxy systemowego jest sprawdzane przy starcie; ustaw je świadomie podczas uruchamiania JVM.

Historyczne odpowiedzi opisują konkretne kombinacje starych okien dialogowych Windows i starych JDK. Te raporty mogą wyjaśnić pochodzenie obejścia, ale nie dowodzą, że bieżące środowisko uruchomieniowe ma ten sam błąd. Zapisz wersję środowiska i dane wyjściowe selektora, zanim zmienisz ustawienia systemu operacyjnego dla wszystkich aplikacji.

Jeśli aplikacja potrzebuje proxy HTTP dla jednego klienta, jawna konfiguracja proxy może uczynić to wymaganie jaśniejszym. Jeśli potrzebuje centralnego automatycznego routingu, zbadaj, dlaczego selektor otrzymał lub zwrócił nieoczekiwany wpis SOCKS.

Niestandardowy selektor powinien zachować zamierzone obejścia i obsługę błędów. Filtrowanie wszystkich kandydatów SOCKS bez rozróżnienia może zerwać połączenia, które miały korzystać z jednego z nich. Napraw niepoprawną regułę w najmniejszym możliwym do zidentyfikowania zakresie.

Powiązane artykuły