这真是出乎意料的行为。我正在使用JavaFX WebView编写一个简单的Web浏览器。为了使Web请求通过本地代理,我编写了类似的代码:
System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8080");
如果代理正在运行,它似乎工作正常。但是,如果不是,Java会默默地恢复为不使用代理!如果代理不可用,如何强制Java失败?
答案 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连接。