我正在尝试使用 CloseableHttpClient 通过 HTTPS 连接到 Web 服务器。但是,每当我尝试打开连接时,客户端都会抛出 NoHttpResponseException。
当我尝试 cURL 或 Wget 到同一个网络服务器时,我只能通过使用-k和--no-check-certificate(分别)来正确完成,这让我认为这是与 SSL 证书相关的问题。我已将 SSLContext 添加到我的 HttpClient (代码如下),但它没有效果。
SSLContextBuilder sslContextBuilder = SSLContexts.custom();
sslContextBuilder.setSecureRandom(new java.security.SecureRandom());
sslContextBuilder.loadTrustMaterial(null, new TrustStrategy() {
public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
return true;
}
});
SSLContext sslContext = sslContextBuilder.build();
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪如下所示:
信息:处理对 {s}-> https://server.com:443的请求时捕获 I/O 异常(org.apache.http.NoHttpResponseException) :目标服务器无法响应 2017 年 6 月 30 日 4:20:53 PM org.apache.http.impl.execchain.RetryExec 执行信息:重试请求到 {s}-> https://server.com:443 异常:org.apache.http.NoHttpResponseException:server.com:443 未能响应在 org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141) 在 org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) 在 org.apache.http.impl .io.AbstractMessageParser.parse(AbstractMessageParser.java:259)在org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)在org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java) :165)在org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)在org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)在org.apache.http.impl。 execchain.MainClientExec.execute(MainClientExec.java:272) …