L'appel à l'un de nos services Web internes semble donner l'erreur suivante:
Java.io.IOException: unexpected end of stream on Connection{webservicessandbox.xxx.com:443, proxy=DIRECT@ hostAddress=174.143.185.13 cipherSuite=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA protocol=http/1.1} (recycle count=0)
D'après ce que j'ai vu ailleurs, il s'agit d'un problème de serveur, mais nous ne voyons pas ce problème lorsque WS est appelé dans un navigateur ou dans IOS. J'ai utilisé à la fois OkHTTP et une implémentation manuelle HTTPUrlConnection et cela n'a pas semblé faire la différence. Quelqu'un a-t-il une idée?
OKHttp:
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.addHeader("Authorization", "Bearer " + apiToken)
.addHeader("content-type", "application/json")
.url(uri)
.build();
HTTPURLConnection:
URL myURL = new URL(uri);
HttpsURLConnection myConnection = (HttpsURLConnection) myURL.openConnection();
myConnection.setConnectTimeout(TIMEOUT_MILLISEC);
myConnection.setDoOutput(false);
myConnection.setRequestMethod("GET");
myConnection.setRequestProperty("Authorization", "Bearer " + apiToken);
myConnection.setRequestProperty("content-type", "application/json");
int respCode = myConnection.getResponseCode();
Cette erreur TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
est liée au serveur. Une raison possible pourrait être, le serveur est arrêté.
Le client et le serveur doivent fermer la connexion une fois qu'ils sont terminés.
Dans votre générateur de requête OkHttp, ajoutez cette ligne: .header("Connection", "close")
.
Consultez également l'onglet Réseau de l'inspecteur de votre navigateur pour voir les en-têtes que ce dernier envoie. Faites correspondre ces en-têtes dans votre code et cela devrait fonctionner.
S'il vous plaît essayer les solutions potentielles (à mon avis) ci-dessous:
1- Essayez d'utiliser retryOnConnectionFailure(true)
comme ci-dessous:
OkHttpClient client = new OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.build();
2- Essayez d'ajouter: request.addHeader("Connection","close")
(la plupart des cas, c'est la solution, en respectant la réponse de Kartik.)
Request request = new Request.Builder()
.addHeader("Authorization", "Bearer " + apiToken)
.addHeader("content-type", "application/json")
.addHeader("Connection","close")
.url(uri)
.build();
3- Veuillez augmenter le temps de réponse du serveur (définissez-le aussi haut que possible) et réessayez.
Voir aussi: OkHTTP Websocket: Fin inattendue de Steam sur Connection