如果Java的http代理关闭,它将恢复为非代理

时间:2012-09-18 12:42:23

标签: java networking javafx javafx-2

这真是出乎意料的行为。我正在使用JavaFX WebView编写一个简单的Web浏览器。为了使Web请求通过本地代理,我编写了类似的代码:

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

如果代理正在运行,它似乎工作正常。但是,如果不是,Java会默默地恢复为不使用代理!如果代理不可用,如何强制Java失败?

2 个答案:

答案 0 :(得分: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());

安装此选择器

答案 1 :(得分:1)

当使用代理时,其中一位WebView开发人员Vasily提供了一些sample code to track load operation status。不确定它是否会有所帮助,但你可以看看它。

瓦西里,也是notes

  

目前,WebEngine不提供对代理或更一般的HTTP身份验证的特殊支持,但依赖于java.net。*堆栈在该区域提供的内容。

如果您使用JavaFX packaging tasks捆绑您的应用程序:

  

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

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

有一个guide to proxies,其中提到https有自己的代理处理程序:(https.proxyHost和https.proxyPort),所以如果您的浏览器将要制作,这也是需要注意的事项https连接。