2

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 です。

これにより、あるケースではプロキシ設定が検出され、別のケースでは検出されない原因は何ですか?

編集:

起動プロセスでコードをより早く移動することでこれを修正しましたが、なぜこれが修正されたのかわかりません。

4

2 に答える 2