Požadavek v Javě může narazit na několik vstupů proxy: explicitní konfiguraci klienta, výchozí selektor, síťové vlastnosti JVM a podporovaná nastavení operačního systému. Když se v protokolu nečekaně objeví SOCKS, zjistěte, který vstup jej zvolil.

U kódu, který používá výchozí selektor, prozkoumejte rozhodnutí pro přesný cíl:

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

Toto vypíše kandidáty selektoru. Nedokazuje, které připojení nakonec uspělo, a klient s vlastní explicitní cestou se může rozhodnout jinak.

Zkontrolujte efektivní nastavení

Projděte http.proxyHost, https.proxyHost, socksProxyHost, jejich porty a java.net.useSystemProxies. Dokumentace síťových vlastností JDK popisuje jejich rozsah a prioritu. Zjišťování systémové proxy se provádí při startu; nastavte je vědomě při spouštění JVM.

Historické odpovědi popisují konkrétní kombinace starých dialogů Windows a starých JDK. Tyto zprávy mohou vysvětlit původ řešení, ale nedokazují, že současný runtime má stejnou chybu. Před změnou nastavení operačního systému pro všechny aplikace zaznamenejte verzi runtime a výstup selektoru.

Pokud aplikace potřebuje HTTP proxy pro jednoho klienta, explicitní konfigurace proxy může tento požadavek zpřehlednit. Pokud potřebuje centrální automatické směrování, prozkoumejte, proč selektor obdržel nebo vrátil neočekávanou položku SOCKS.

Vlastní selektor by měl zachovat zamýšlená obejití a ošetření selhání. Plošné filtrování všech kandidátů SOCKS může přerušit připojení, která měla jeden použít. Opravte nesprávné pravidlo v nejmenším rozsahu, který dokážete určit.

Související články