Aucun corps dans la reponse a une requete GET en http

Fermé
KikiAmboara Messages postés 21 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 27 janvier 2016 - 19 janv. 2016 à 18:56
KikiAmboara Messages postés 21 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 27 janvier 2016 - 20 janv. 2016 à 22:41
Bonjour,

Notre projet de fin d'annee consiste a creer un navigateur web, soit un client http, developper avec un socket en java.
Mon probleme c'est que en envoyent une requete GET, je suis connecte au serveur avec le code 200 OK mais aucun fichier ne me parvient cad j'obtiens l'en-tete mais pas le corps de la reponse proprement dite.

Voici mon code:
public boolean verifGet() {
/** permet de créer un flux de sortie sur la socket vers le serveur */
DataOutputStream dos;

/** permet de lire sur la socket les messages provenant du serveur */
BufferedReader br;

/** permet d'écrire sur le flux de sortie donc d'envoyer des messages au serveur */
PrintStream ps;
try {
/** permet de créer un flux d'entrée sur la socket vers le client */
InputStream in = tunnel.getInputStream();

/** permet de créer un flux de sortie sur la socket vers le serveur */
OutputStream out = tunnel.getOutputStream();

/** permet de lire sur la socket les messages provenant du serveur */
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

/** permet d'écrire sur le flux de sortie donc d'envoyer des messages au serveur */
PrintWriter writer = new PrintWriter(out);

// BufferedWriter out = new BufferedWriter (new OutputStreamWriter(sock.getOutputStream ())) ;
// BufferedReader inp = new BufferedReader (new InputStreamReader(sock.getInputStream ())) ;

/** envoi de la commande pour l'obtention d'informations sur le serveur */
//String command = "OPTIONS / HTTP/1.0\n\n";
String command = "GET / HTTP/1.0\r\nHost: "+ip+"\r\nUser-Agent: Browser/0.0\r\nAccept: text/html\r\nConnection: keep-alive\r\n\r\n";
System.out.println(command);
writer.print(command);
writer.flush();

/** lecture de la réponse */
//System.out.println(reader.readLine());
String[] input = reader.readLine().split(" ");
if (input[1].charAt(0)=='5') {
System.out.println(input[1]);
return false;
}
for (int i=0;i<input.length;i++) {
System.out.print(input[i] + " ");
}
System.out.println();

/** fermeture de la socket */
tunnel.close();
return true;
}
catch (IOException e) {
System.out.println("IOException");
return false;
}
}


1 réponse

tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 122
19 janv. 2016 à 19:15
Bonjour,

Je n'ai jamais essayé cela avant et je n'ai pas étudié la structure du HTTP au détail près mais à ce que je vois vous faites une seule lecture :

String[] input = reader.readLine().split(" ");


Alors, la réponse n'est pas forcément vide, mais vous ne la lisez pas, à mon avis "readLine()" doit être dans une boucle après la vérification que la réponse est 200 OK :

String contenu = "";
if (input[1].charAt(0)=='2') {
    String ligne = reader.readLine();
    while(ligne != null){
        contenu = contenu + ligne + "\n";
        ligne = reader.readLine();
    }
}


Ou quelque chose du genre.

Bon Courage.
0
Merci pour votre reponse mais ca ne marche pas.
0
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 122
Modifié par tarek_dotzero le 20/01/2016 à 18:34
Mmmmm,
Vous pouvez mettre plus d'information : la valeur de ip? les affichages dans la console?
Vous pouvez essayer le débogueur pour voir les valeurs des différentes variables.
0
KikiAmboara Messages postés 21 Date d'inscription jeudi 24 septembre 2015 Statut Membre Dernière intervention 27 janvier 2016
20 janv. 2016 à 22:41
J'ai deja tout essayer en vain
0