Salut a tous,
Je suis en train de travailler sur un programme qui doit recuperer un fichier audio present sur un serveur Web. Pour cela, j'ai un fichier Php qui recupere une requete POST et envoie le code du fichier donne en parametre.
Voici le code :
De l'autre cote, j'ai realise un programme en C qui envoie une requete de type POST au serveur et qui recupere la reponse qui est l'entete HTTP plus les donnees du fichier audio ki est envoyé.
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?php $cmd = $_POST['cmd']; $user = $_POST['user']; $passwd = $_POST['passwd']; $version_soft = $_POST['version_soft']; $id_audio = $_POST['id_audio']; // Perment d'envoye le code du fichier readfile($id_audio); exit; ?>
Je recupere bien l'entete et les données du fichier audio que je sauvegarde dans un fichier. Le pb vient du fait que les fichiers de depart et d'arrive sont different, il y a quelques octets (tres peu) qui ont ete ajoute lors de l'envoi et je ne sais pas du tout pourquoi.
Voici le code C :
Et donc a la fin de l'execution, je recois bien le 99 % du fichier mais des bytes se sont inseres et je ne sais pas d'ou il provienne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 char *servername = "127.0.0.1"; char *filepath = "/media.php"; char *param = "cmd=2&user=user&passwd=passwd&version_soft=version_soft&id_audio=file.wav"; int len = strlen(param); sprintf(msg,"POST %s HTTP/1.1\r\nHost:<a href="http://www.lalala.com\r\nContent-type:" target="_blank">www.lalala.com\r\nContent-type:</a>application/x-www-form-urlencoded\r\nContent-length: %d\r\n\r\n%s\r\n\r\n",filepath,len,param); send(conn,msg,strlen(msg),0); // We have to open with the binary mode fp = fopen("./file.wav","wb"); // Pour lire l'entete en premier int type = 0; while((type != 4) && (y = recv(conn,header,1,0))) { if (type == 0 && header[0] == '\r') type = 1; else if (type == 1 && header[0] == '\n') type = 2; else if (type == 2 && header[0] == '\r') type = 3; else if (type == 3 && header[0] == '\n') type = 4; else type = 0; } // Et apres on recupere les octets du fichier envoye et on les sauve while(y=recv(conn,buff,sizeof(buff),0)) { fwrite(buff,y,1,fp); } fclose(fp); closesocket(conn); WSACleanup();
Si quelqu'un pouvait me renseigner et m'aider ??
Merci d'avance
Bonne nuit
Partager