Problème lors de la récéption de données en HTTP

Résolu
Fran6web Messages postés 18 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 2 mars 2008 - 28 févr. 2008 à 21:49
Fran6web Messages postés 18 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 2 mars 2008 - 29 févr. 2008 à 11:02
Bonjour,
Je suis en train de me faire un programme en C qui me récupère le contenu d'un page envoyé par protocole HTTP.

J'ai cependant un p'tit problème, lorsque je reçois la page il y a des caractères en plus qui se mette par ci par là.
Sous mon terminal ils apparaissent comme ceci :<table cellpadding"0" cellsp \370\337 acing"0"><tr><td valign= "middle">

J'enregistre aussi le résultat dans un fichier et voici ce que ça rend dans le fichier :
<table cellpadding="0" cellsp øß acing ="0"><tr><td valign="middle">

Bien sur avec mon navigateur si j'affiche la source j'ai ça :
<table cellpadding ="0" cellspacing="0"><tr><td valign="middle">

Voici la partie de mon script qui s'occupe de recevoir les données :
FILE* fichier = NULL;
fichier = fopen("test.txt", "w+");
               
while(recv(sock, buffer, sizeof(buffer), 0)) {
   printf("%s", buffer);
   fprintf(fichier, "%s", buffer);
                   
   for (buffer_none = 0 ; buffer_none <= sizeof(buffer) ; buffer_none++) {
     buffer[buffer_none] = "\0";
}

Auriez-vous la réponse à ce problème ?

2 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
29 févr. 2008 à 01:58
Salut,

buffer ne contient pas une chaine mais un certain nombre d'octet, il
faut sauver la valeur de retour du recv pour savoir combien exactement.
tu ne peux donc pas faire de fprintf(fichier, "%s", buffer); ou tout
autre manipulation du même genre qui supposerait que buffer contienne
une chaine terminée par '\0'.

La boucle pour remettre tout buffer a 0 ne sert a rien (en plus d'etre fausse).

Un truc dans ce gout la ca devrait fonctionner un peu mieux:

int n;

while((n = recv(sock, buffer, sizeof(buffer) - 1, 0)) > 0) {

    buffer[n] = 0;

    fprintf(fichier, buffer);

}

il faut aussi ouvrir le fichier en mode binaire.
3
Fran6web Messages postés 18 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 2 mars 2008
29 févr. 2008 à 11:02
Salut aardman,
Je te remercie pour ta réponse qui semple avoir corrigé le problème des caractères en plus.
0
Rejoignez-nous