8 か月前、このスタック オーバーフローの投稿を使用して、Java プロジェクトでプロキシ サーバーを自動的に使用しました。それは美しく働きました。
そのときに思いついたコードは次のとおりです。
System.setProperty("java.net.useSystemProxies", "true");
List<Proxy> proxyServers = null;
try {
proxyServers = ProxySelector.getDefault().select(new URI("http://www.twitter.com"));
} catch (URISyntaxException e) {
System.out.println("Error using system proxy");
}
if (proxyServers != null) {
for (Iterator<Proxy> iter = proxyServers.iterator(); iter.hasNext();) {
Proxy proxy = iter.next();
System.out.println("Found Proxy: " + proxy);
InetSocketAddress addr = (InetSocketAddress) proxy.address();
if (addr == null) {
System.out.println("No Proxy");
} else {
System.setProperty("http.proxyHost", addr.getHostName());
System.setProperty("http.proxyPort", Integer.toString(addr.getPort()));
System.out.println("proxy hostname : " + addr.getHostName());
System.out.println("proxy port : " + addr.getPort());
}
}
}
最近、まったく同じコードを別のプロジェクトに追加しようとしましたが、異なる結果が得られました。テスト プロキシ サーバーを使用するようにコンピューターをセットアップし、両方のプロジェクトを実行して結果を比較しました。8 か月前からプロジェクトを実行すると、次のように出力されます。
Found Proxy: HTTP @ 192.168.1.100:8000
proxy hostname : 192.168.1.100
proxy port : 8000
現在のプロジェクトを、同じプロキシ サーバーがセットアップされた同じマシンで実行すると、次のように出力されます。
Found Proxy: DIRECT
No Proxy
見つかった唯一のプロキシは「ダイレクト」で、proxy.address() は null です。
これにより、あるケースではプロキシ設定が検出され、別のケースでは検出されない原因は何ですか?
編集:
起動プロセスでコードをより早く移動することでこれを修正しましたが、なぜこれが修正されたのかわかりません。