我使用以下代码获取连接重置错误。导致连接重置的问题到底是什么问题?是因为我试图忽略SSL证书验证的方式吗?
String serviceUri = "https://service.providers.com/applications";
String reqJson = "request json string";
//this is to ignore SSL validation.
SSLContextBuilder builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true;
}
});
SSLConnectionSocketFactory sslSF = new SSLConnectionSocketFactory(builder.build(),
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslSF).build();;
HttpPost postRequest = new HttpPost(serviceUri);
StringEntity input = new StringEntity(reqJson);
input.setContentType("application/json");
postRequest.setEntity(input);
CloseableHttpResponse response = httpClient.execute(postRequest);
try {
//do some stuff
///
//make sure you consume the entire response
HttpEntity entity = response.getEntity();
EntityUtils.consume(entity);
} catch (IllegalStateException e) {
e.printStackTrace();
}finally{
response.close();
}
堆栈跟踪
java.net.SocketException:连接重置为 java.net.SocketInputStream.read(SocketInputStream.java:179)at com.ibm.jsse2.a.a(a.java:148)com.ibm.jsse2.a.a(a.java:96)at com.ibm.jsse2.tc.a(tc.java:302)at com.ibm.jsse2.tc.g(tc.java:208) 在com.ibm.jsse2.tc.a(tc.java:482)at com.ibm.jsse2.tc.startHandshake(tc.java:597)at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:275) 在 org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:254) 在 org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:117) 在 org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) 在 org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363) 在 org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219) 在 org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) 在 org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86) 在 org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) 在 org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
答案 0 :(得分:0)
我能够找出问题所在。原来这是一个网络相关的问题。从我的本地计算机上安装的服务器发出的请求不会通过代理服务器进行路由。但是我们公司的防火墙并不想要跳过代理的请求,所以它正在放弃连接。一旦我将代理路由规划器添加到http请求,我的请求就会通过。