web-dev-qa-db-fra.com

java.io.IOException: fin inattendue du flux sur Connection dans Android

J'ai l'URL du service Web, cela fonctionne bien. Il donne les données JSON. Lorsque j'utilise HttpURLConnection, InputStream, j'obtiens une erreur. comme 

Java.io.IOException: fin de flux inattendue sur Connexion {comenius-api.sabacloud.com:443, proxy = DIRECT hostAddress = 12.130.57.1 ​​ cipherSuite = TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 protocole = http/1.1} (nombre de recyclés = 0)

 try{
        URL url = new URL("https://comenius-api.sabacloud.com/v1/people/username="+username+":(internalWorkHistory)?type=internal&SabaCertificate="+ certificate);

        HttpURLConnection con = (HttpURLConnection)url.openConnection();
        InputStream ist = con.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(ist));

        while((singleLine = reader.readLine())!= null){
            data = data + singleLine;
            Log.e("Response", data);
        }

    }catch(Exception e)
    {
        e.printStackTrace();
    }

comment régler ceci?

8
phaneendra tatapudi

J'ai eu le même problème en utilisant OKHttp3. Le problème était que je n'ai pas fermé la connexion pour chaque demande et que pour le client la même connexion était disponible et que pour le serveur pas, pour cette raison, le serveur renvoie une erreur.

La solution indique à chaque demande de fermer la connexion lorsque celle-ci est terminée. Vous devez ajouter un drapeau dans l'en-tête pour l'indiquer. Dans OKHttp3 c'est comme ça:

Request request = new Request.Builder()
                             .url(URL)
                             .header("Connection", "close")
                             ...
8
Rados

J'ai rencontré ce problème aujourd'hui. Et il s’avère que c’est la faute du serveur, car le serveur a renvoyé une erreur et s’est arrêté au moment où il analyse la demande. 

Vérifiez votre backend, s'il ne vous appartient pas, prévenez le propriétaire de ce serveur

5
grandia

J'ai eu le même problème, il s'est avéré que le proxy était toujours configuré sur l'émulateur alors que Charles n'était plus ouvert

1
Rule

Je viens de découvrir la solution 
C’est vraiment un problème côté serveur ET La solution consiste à envoyer l’en-tête content-length 
Si vous utilisez php, faites juste votre code comme ceci 

<?php
ob_start();
// the code - functions .. etc ... example:
$v = print_r($_POST,1);
$v .= "\n\r".print_r($_SERVER,1);
$file = 'file.txt';
file_put_contents($file,$v);
print $v;


// finally
$c = ob_get_contents();
$length = strlen($c);
header('Content-Length: '.$length);
header("Content-Type: text/plain");
//ob_end_flush(); // DID NOT WORK !!
ob_flush()
?>

L’astuce utilisée ici est d’envoyer l’en-tête content-length en utilisant le tampon de sortie 

0
Alaa Morad

Je testais mon application avec localhost en utilisant XAMPP et cette erreur se produisait. Le problème était lié au port utilisé par Skype à l'aide du port 443. J'ai simplement quitté Skype et l'erreur a été résolue! 

0
Tabish

C’est peut-être un vieux fil conducteur, car pour moi, vérifiez votre connexion Internet (Wifi), il pourrait y avoir une restriction à l’accès à certains de vos points finaux.

J'ai corrigé le mien en utilisant/connectant à mes données mobiles.

-chiffres/codages heureux

0
ralphgabb