我正在开发一个旨在集成到其他应用程序中的库。我必须与 https 服务器通信,并且我使用的是 apache commons HttpClient 3.1。我有自己的 keystore ,需要注册 Protocol通过:Protocol.registerProtocol
。我想知道是否有一种方法可以为我的特定客户端实例而不是静态地注册它 - 这样我就不会弄乱任何其他实例,也没有人会弄乱我。
我看到了一些可以获取客户端 HostConfiguration 并调用 setHost 的东西,带有协议(protocol),但似乎无法正常工作。我正在注册它:
HostConfiguration config = client.getHostConfiguration();
config.setHost(remoteUrl.getHost(), remoteUrl.getPort(), new Protocol("https", new MyProtocolSocketFactory(), 443));
但是在尝试建立连接时,SSL 握手失败,而在使用具有相同参数的 Protocol.registerProtocol 时它有效。失败是标准:
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: 无法找到请求目标的有效证书路径
最佳答案
升级到 HttpComponents 4 并保留客户端 3.x。
关于java - Apache Commons Http 客户端 - 注册客户端特定协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3822125/