J'ai une fonction qui utilise un HttpUrlConnection pour appeler un service sur un client distant. Cette fonction fonctionne correctement jusqu'à ce que nous ayons ajouté un nouveau client distant sécurisé qui ne peut être appelé qu'à l'aide de HttpsUrlConnection.SocketException lors de la connexion à HttpURLConnection après l'accès à HttpsURLConnection
L'appel du nouveau client distant https fonctionne correctement, après avoir appelé le nouveau client, l'ancien client renvoie un java.net.SocketException: Connection reset
lorsque vous essayez d'obtenir l'objet InputStream.
Mon code ressemble à quelque chose comme ceci:
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
conn.setRequestMethod("POST");
out = conn.getOutputStream();
writer = new OutputStreamWriter(out);
writer.write(strJson);
writer.close();
in = conn.getInputStream(); // connection reset error here.
reader = new InputStreamReader(in);
rd = new BufferedReader(reader);
while ((line = rd.readLine()) != null) {
result += line;
}
rd.close();
in.close();
reader.close();
out.close();
conn.disconnect();
Quelqu'un a une idée de ce qui est arrivé? Merci d'avance.
La trace de la pile est comme ceci:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
at sun.security.ssl.InputRecord.read(InputRecord.java:480)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:891)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:690)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:661)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1324)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
Stack trace s'il vous plaît. – EJP
Habituellement, pour connecter l'URL Https, vous devez ajouter le certificat de sécurité à votre application. –
Avant la ligne "in = conn.getInputStream()", pouvez-vous ajouter conn.setDoInput (true) pour indiquer que l'application a l'intention de lire les entrées de la connexion? – OTM