0

これは本当に予期しない動作です。JavaFX WebViewを使用して単純な Web ブラウザーを作成しています。Web リクエストがローカル プロキシを通過するようにするために、次のようなコードを書きました。

System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8080");

プロキシが実行されている場合、正常に動作しているように見えます。ただし、そうでない場合、Java は暗黙のうちにプロキシをまったく使用しない状態に戻ります。プロキシが利用できない場合、Java を強制的に失敗させるにはどうすればよいですか?

4

2 に答える 2

2

プロキシのみを許可し、代替手段としてProxySelector提供しないカスタムでこれを行うことができる場合があります。Proxy.NO_PROXY

import java.net.*;
import java.util.*;

public class AlwaysProxySelector implements ProxySelector {
  private List<Proxy> proxies = Arrays.asList(new Proxy[] {
        new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 8080))
      });

  public List<Proxy> select(URI u) { return proxies; }
  public void connectFailed(URI u, SocketAddress a, IOException e) {}
}

このセレクターは、を使用してインストールしますProxySelector.setDefault(new AlwaysProxySelector());

于 2012-09-18T13:13:44.927 に答える
1

WebView 開発者の 1 人である Vasily は、プロキシを使用する際の読み込み操作のステータスを追跡するためのサンプル コードを提供しました。参考になるかわかりませんが、参考にしてみてください。

ヴァシリーも次のように述べています

現時点では、WebEngine はプロキシまたはより一般的には HTTP 認証の特別なサポートを提供していませんが、java.net.* スタックがその領域で提供するものに依存しています。

JavaFX パッケージ化タスクを使用してアプリケーションをバンドルする場合:

メイン アプリケーションの JAR ファイルには、ブートストラップの起動を処理するランチャー プログラムが含まれます... アプリケーションのシステム プロキシの設定

また、以前のバージョンにはプロキシ処理の一部にバグがあったため、JavaFX の最新バージョンを使用していることを確認してください。

プロキシのガイドがあり、https には独自のプロキシ ハンドラー (https.proxyHost および https.proxyPort) があると記載されているため、ブラウザーが https 接続を行う場合にも注意が必要です。

于 2012-09-18T19:51:24.903 に答える