0

这真是出乎意料的行为。我正在使用 JavaFX WebView编写一个简单的网络浏览器。为了使 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

Vasily 是 WebView 开发人员之一,提供了一些示例代码来跟踪使用代理时的加载操作状态。不确定它是否会有所帮助,但你可以看看它。

瓦西里,还指出

目前,WebEngine 没有为代理或更一般的 HTTP 身份验证提供特殊支持,但依赖于 java.net.* 堆栈在该领域提供的功能。

如果您使用JavaFX 打包任务捆绑您的应用程序:

主应用程序 JAR 文件将包含一个启动程序,该程序负责引导启动... 为您的应用程序设置系统代理

此外,请确保您使用的是最新版本的 JavaFX,因为早期版本在某些代理处理方面存在错误。

有一个代理指南,其中提到 https 有它自己的代理处理程序:(https.proxyHost 和 https.proxyPort),因此如果您的浏览器将建立 https 连接,这也是需要注意的。

于 2012-09-18T19:51:24.903 回答