1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
public byte[] TraitementReponse(InputStream reponseServeur ) {
final String CRLF = "\r\n";
final int buffer = 33554432;
final int maxTailleObj;
String statusLigne = "";
String headers = "";
BufferedReader reponseServeurBuff = null;
ByteArrayInputStream byteArrayInputStream = null;
byte[] tmpArray = null;
int count = 0;
//byte[] body = new byte[maxTailleObj];
int length = -1;
boolean obtenirStatusLigne = false;
try{
// tempBuff = new InputStream(reponseServeur);
tmpArray = org.apache.commons.io.IOUtils.toByteArray(new InputStreamReader(reponseServeur),"UTF-8");
reponseServeurBuff = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(tmpArray)));
//reponseServeurBuff = new BufferedReader(new InputStreamReader(tempBuff));
String ligne = reponseServeurBuff.readLine();
/**Dans la boucle ci-dessous on va lire chaque ligne de la réponse du serveur web.
* Tans que la taille de la ligne est différente de zéro la variable "statusLigne" récupère le contenu de cette ligne.
* Si le contenu de cette ligne = 0, on ajoute "\r\n" à la fin pour dire que notre requete est finie.
*
* Ensuite on test chaque ligne afin de trouvé la taille de la réponse.
* On récupère ensuite cette taille dans notre variable "length".
*/
while(ligne.length() !=0){
if (!obtenirStatusLigne){
statusLigne = ligne;
obtenirStatusLigne = true;
}
else{
headers += ligne + CRLF;
}
if (ligne.startsWith("Content-Length:") ||
ligne.startsWith("Content-length:")){
String[] tmp = ligne.split(" ");
length = Integer.parseInt(tmp[1]);
}
ligne = reponseServeurBuff.readLine();
}
}catch(IOException e) {
System.out.println("Erreur de lecture du headers venant du serveur WEB: " + e);
}
byte[] body = new byte[length];
String res = "";
res = statusLigne + CRLF;
res += headers;
res += CRLF;
int test = res.getBytes().length;
byteArrayInputStream = new ByteArrayInputStream(tmpArray,test,tmpArray.length);
// try{
int bytesLu = 0;
byte buf[] = new byte[buffer];
boolean boucle = false;
/**
* La condition ci-dessous est utilisée dans le cas où il n'y aurait de "Content-length" dans la réponse.
* On boucle ensuite dans le while jusqu'à la fermeture de la connexion.
*/
if (length == -1){
boucle = true;
}
/**
* Lecture du corps de la réponse et on copie le contenu dans la variable body.
* On s'arrête quand le nombre de bytesLu = Length ou jusque ce que la connexion se coupe.
*/
while (bytesLu < length || boucle){
int size = byteArrayInputStream.read(buf,0, buffer);
if (size == -1) {
break;
}
/**
* Copie des bytes dans le body en s'assurant qu'on ne dépasse pas la taille d'objet maximum.
*/
for (int i =0;
1 < size && (i+ bytesLu) < length;
i++){
body[bytesLu + i] = buf[i];
/** trouver ce qu'il faut faire ici action avec buf[i]*/
}
bytesLu += size;
}
byte[] byteRequete = new byte[res.getBytes().length + body.length];
System.arraycopy(res.getBytes(), 0, byteRequete, 0, res.getBytes().length);
System.arraycopy(body, 0, byteRequete, res.getBytes().length, body.length);
return byteRequete;
} |
Partager