fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008
-
5 juil. 2007 à 17:52
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
9 juil. 2007 à 22:51
Salut a tous,
Desolé pour ce cri primaire, mais je comprends pas pourquoi ca ne marche pas...
Voici ma la requete que je send :
char canal[200];
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;
sock = socket(AF_INET, SOCK_STREAM, 0);
connect(sock, (SOCKADDR *)&sin, sizeof(sin))
send(sock, canal, strlen(canal), 0); // on envoie la requête HTTP.
closesocket(sock); // on ferme le socket.
WSACleanup();
Mon fichier truc.php est censé m'afficher le contenu via ce code : <?php print_r($_POST); ?>
mais ca m'ecris : Array()
si je mets <?php print_r($_POST['titi']); ?> ca me mets une page vierge
J'ai sniffer avec Wireshark, et ma requete parait bien lancée au serveur :
POST truc.php HTTP/1.1
Host: 1.1.32.80
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
titi=canari
Merci d'avance, je sens que mon erreur est toute bete, mais je suis tout de meme dessus depuis ce matin!
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 9 juil. 2007 à 16:36
Bon désolé je fais mes questions et mes réponses, mais comme là sa fonctionne autant en faire profiter tout le monde :
Voici au final ma requete :
strcpy(canal,"POST /toto.php HTTP/1.1\r\n");
strcat(canal,"Host: ");
strcat(canal,"1.1.XX.XX");
strcat(canal,"\r\n");
strcat(canal,"Connection: Close\r\n");
strcat(canal,"Content-Type: application/x-www-form-urlencoded\r\n");
strcat(canal,"Content-Length: ");
strcat(canal, longueurdelachaine);
strcat(canal,"\r\n\r\n");
strcat(canal,"titi=canari&&toto=youpi");
strcat(canal,"\r\n\r\n");
et le script php :
<?php
$fp = fopen ("fichierLog.txt", "a+");
fputs ($fp, "titi= ");
fputs ($fp, $_POST['titi']);
fputs ($fp, " AND toto=");
fputs ($fp, $_POST['toto']);
fputs ($fp, "\r\n");
fclose ($fp);
?>
Je recois bien "canari" et "youpi" dans mon "fichierlog"
J'ai créé ce fichier tampon afin de m'assurer si la requete fonctionnait bien...
Merci a tous
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 5 juil. 2007 à 19:28
Salut,
Ok, donc je devrais faire quoi. Essayer avec des printf?
Faire un seul strcat global?
Je ne vois pas trop pour le '/0', car j'ai fait le meme systeme de strcat pour une requete GET precedemment, afin de recuperer d'autres données, et cela fonctionne parfaitement...
Vous n’avez pas trouvé la réponse que vous recherchez ?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 5 juil. 2007 à 20:48
Aussi, ajouter la chaine dès la déclaration de canal, toujours si la requête est constante, permettrait d'utiliser sizeof (sizeof(canal)-1) au lieu de strlen. Évidament, tant qu'à faire, on pourrait tout aussi bien tout envoyer directement à partir de send mais bon...
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 5 juil. 2007 à 20:52
J'essaye tout cela des que possible!
Cependant, l'adresse Host pourra varier ( lue a partir d'un fichier INI), et surtout le contenu ne sera pas si basique, mais une chaine variant, récupérée en fonction d'actions de l'utilisateur.
Ceci dit, si la premiere solution ne fonctionne pas, j'essaierai avec une constante pour voir si le probleme vient de la
Je vous tiens au courant,
Merci bien
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 5 juil. 2007 à 21:16
Ah bon. Ben si ta requête n'est pas constante, oublies ce que je viens d'écrire.
Une méthode simple serait d'utiliser sprintf mais comme je risque de me faire tuer par BruNews pour avoir dis une telle chose, je dirais donc que le mieux reste de coder ton propre strcat ou strcpy pour qu'il puisse retourner un pointeur sur le 0 de fin de chaine afin de permettre un chaine direct et aussi, de minimiser les appels à ton strcat ou strcpy.
Voici un exemple simple:
// La fonction strcpy perso
__inline char *mystrcpy (char *dest, char *src)
{
//while(*dest) dest++; // Décommente cette ligne et tu auras un strcat
while(*src) *dest++ = *src++;
*dest = 0;
return dest;
}
// Dans le code...
char canal[200], *c = canal;
c = mystrcpy(c,"POST truc.php HTTP/1.1\r\n");
c = mystrcpy(c,"Host: 1.1.32.80\r\n");
c = mystrcpy(c,"Content-Type: application/x-www-form-urlencoded\r\n");
c = mystrcpy(c,"Content-Length: 11\r\n\r\n");
mystrcpy(c,"titi=canari\r\n\r\n");
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 6 juil. 2007 à 09:19
Snif toujours pas!
Je commence a avoir des doutes, et si ma chaine était bonne e tle probleme venait d'ailleurs? J'ai tout de meme mis le strcpy qui me semble plus sur que tous mes strcat, et j'ai testé ta mathode SAKingdom qui me fait la meme chose.
Donc, lorsque je mets Wireshark sur le coup, je vois que :
- la requete POST client -> vers serveur fonctionne
- cest dans l'autre sens qu'il me mets un probleme : serveur-> vers client, l'acquittement plante, et le probleme est au niveau du Cheksum : Bad Checksum=True
Une idée... Ca menerrve lol
ps : on est bien d'accord, la target de mon POST doit bien etre "truc.php" et pas "/truc.php" ?? toute facon j'ai aussi tester la deuxieme, qui me mets une requete 200 OK, mais ki fait rien...
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 6 juil. 2007 à 09:43
Ou alors la requete est incomplete? Me manque peut etre des parametres? Car il a lair de trouver truc.php, si je mets autre chose il renvoi ( dans les snif wireshark toujours) une erreur 404 not found) Or, si pour truc.php fonctionnait vraiment, ne devrait-il pas me mettre un 200 found deja, meme s'en arriver a acquitter??