Rhaaaa Requete Post http

Résolu
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008 - 5 juil. 2007 à 17:52
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 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);

    strcat(canal,"POST truc.php HTTP/1.1\r\n");
    strcat(canal,"Host: 1.1.32.80\r\n");
    strcat(canal,"Content-Type: application/x-www-form-urlencoded\r\n");
    strcat(canal,"Content-Length: 11\r\n");
    strcat(canal,"\r\n");
    strcat(canal,"titi=canari\r\n");
    strcat(canal,"\r\n");
    sin.sin_addr.s_addr = inet_addr("1.1.xx.xx");//serveur local
    sin.sin_family = AF_INET;
    sin.sin_port = htons(80); // port HTTP.

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!

13 réponses

fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Derniè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
3
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
5 juil. 2007 à 17:54
Euh pour ceux qui auraient pas compris, je cherche a afficher ce que j'envoi via ma methode POST...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 juil. 2007 à 18:17
1 prob possible:

le 1er strcat
strcat(canal,"POST truc.php HTTP/1.1\r\n");
qui sait où se trouve le 1er '\0' de la chaine et surtout s'il y en a 1.

ciao...
BruNews, MVP VC++
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Derniè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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 juil. 2007 à 19:51
remplace le 1er strcat par strcpy.

ciao...
BruNews, MVP VC++
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
5 juil. 2007 à 20:43
Si la requête est constante, pourquoi ne pas tout mettre dans le même strcpy ?

strcpy(canal,"POST truc.php HTTP/1.1\r\n"
                 "Host: 1.1.32.80\r\n"
                 "Content-Type: application/x-www-form-urlencoded\r\n"
                 "Content-Length: 11\r\n"
                 "\r\n"
                 "titi=canari\r\n"
                 "\r\n");

Ou encore, dès la déclaration de canal ?

char canal[] = "POST truc.php HTTP/1.1\r\n"
                 "Host: 1.1.32.80\r\n"
                 "Content-Type: application/x-www-form-urlencoded\r\n"
                 "Content-Length: 11\r\n"
                 "\r\n"
                 "titi=canari\r\n"
                 "\r\n";

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
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...

C++ (@++)<!--
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Derniè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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
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");

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
5 juil. 2007 à 21:19
Oups:
"afin de permettre un chainage direct"

C++ (@++)<!--
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Derniè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...
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Derniè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??
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
9 juil. 2007 à 22:51
__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;
}

...

char *c = canal;
c = mystrcpy(c,"POST /toto.php HTTP/1.1\r\nHost: ");
c = mystrcpy(c,"1.1.XX.XX");
c = mystrcpy(c,"\r\nConnection: Close\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: ");
c = mystrcpy(c, longueurdelachaine);
mystrcpy(c,"\r\n\r\ntiti=canari&&toto=youpi\r\n\r\n");

Ceci devrait allez plus vite. J'ai aussi essayer de diminuer le nombre d'appel à mystrcpy en réunissant certaines chaines.

C++ (@++)<!--
0
Rejoignez-nous