Я пытаюсь использовать веб-службу отдыха https, используя CloseableHttpClient и HttpPost в Java, но не могу это сделать.Я думаю, что это как-то связано с моим запросом, а также с ssl и протоколами TLS, но я действительно мало что знаю об этом.Я могу делать запросы от почтальона просто отлично.
Вот мой код:
public class RestHttpsPiloto {
//private static final String POST_URL = "https://www.google.com";
private static final String POST_URL = "https://<URL>";
public static void httpsPilotoMail() throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException{
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
//CloseableHttpClient httpClient=createAcceptSelfSignedCertificateClient();
HttpPost httpPost = new HttpPost(POST_URL);
//HttpGet httpGet = new HttpGet(POST_URL);
String payload = "data={" +
"\"correo\": \"email\", " +
"\"rut\": \"xxxxxxx-x\", " +
"\"nombre\": \"nombre\", " +
"\"idHtml\": \"21\", " +
"\"token\": \"JAHNSMsamJ\"" +
"}";
StringEntity entity = new StringEntity(payload);
httpPost.setEntity(entity);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
//CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
System.out.println("POST Response Status:: "
+ httpResponse.getStatusLine().getStatusCode());
httpClient.close();
}
private static CloseableHttpClient createAcceptSelfSignedCertificateClient()
throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException {
// use the TrustSelfSignedStrategy to allow Self Signed Certificates
SSLContext sslContext = SSLContextBuilder
.create()
.loadTrustMaterial(new TrustSelfSignedStrategy())
.build();
/*SSLContext sslContext = SSLContexts.custom().useSSL().build();
sslContext.init(null, new X509TrustManager[]{new HttpsTrustManager()}, new SecureRandom());
SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslContext,
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);*/
// create an SSL Socket Factory to use the SSLContext with the trust self signed certificate strategy
SSLConnectionSocketFactory connectionFactory = new SSLConnectionSocketFactory(sslContext);
//SSLConnectionSocketFactory connectionFactory = new SSLConnectionSocketFactory(sslContext, new String[] { "TLSv1.2"}, null, null);
//System.setProperty("https.protocols", "SSLv3");
// finally create the HttpClient using HttpClient factory methods and assign the ssl socket factory
return HttpClients
.custom()
.setSSLSocketFactory(connectionFactory)
.build();
}
public static void main(String[] args) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException{
httpsPilotoMail();
}
}
Я должен добавить, что создание closableHttpClient работает как для традиционного метода, так и для метода createAcceptSelfSignedCertificateClient ().Кроме того, с помощью этого кода я могу сделать запрос на получение https в Google.Я также хочу добавить, что я изменил URL в целях конфиденциальности ... поэтому я действительно надеюсь, что в моем коде есть что найти, потому что я знаю, что URL работает, и я не могу его опубликовать.
Вот моя трассировка стека:
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:422)
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:460)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:863)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
at com.vtr.pat.controller.RestHttpsPiloto.httpsPilotoMail(RestHttpsPiloto.java:56)
at com.vtr.pat.controller.RestHttpsPiloto.main(RestHttpsPiloto.java:94)
Большое спасибо в продвинутом.