Requête HTTP - POST avec socket
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 :
Code:
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;
?> |
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é.
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 :
Code:
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(); |
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.
Si quelqu'un pouvait me renseigner et m'aider ??
Merci d'avance
Bonne nuit