2017-05-03 2 views
0

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) 
+0

Stack trace s'il vous plaît. – EJP

+0

Habituellement, pour connecter l'URL Https, vous devez ajouter le certificat de sécurité à votre application. –

+0

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

Répondre

0

Je ne sais pas encore ce qui a causé l'erreur se produise. Ma solution est juste de ne pas utiliser java.net.HttpURLConnection, et d'utiliser org.apache.http.impl.client.DefaultHttpClient à la place.