Aucun corps dans la reponse a une requete GET en http

KikiAmboara Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -  
KikiAmboara Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -
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;
}
}


A voir également:

1 réponse

tarek_dotzero Messages postés 817 Date d'inscription   Statut Membre Dernière intervention   122
 
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
KikiAmboara
 
Merci pour votre reponse mais ca ne marche pas.
0
tarek_dotzero Messages postés 817 Date d'inscription   Statut Membre Dernière intervention   122
 
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   Statut Membre Dernière intervention  
 
J'ai deja tout essayer en vain
0