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

[Résolu]
Signaler
Messages postés
18
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
2 mars 2008
-
Messages postés
18
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
2 mars 2008
-
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

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
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.
Messages postés
18
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
2 mars 2008

Salut aardman,
Je te remercie pour ta réponse qui semple avoir corrigé le problème des caractères en plus.