IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Probleme avec une requete POST


Sujet :

Réseau C

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Probleme avec une requete POST
    Voilà je voudrais uploadé un fichier texte sur un server web.

    Pour celà j'ai mis un script php sur le server le script marche si je passe par un formulaire html.

    Mais si j'envoie la requette POST de client.c bin la le server me répond

    HTTP/1.1 400 Bad Request
    Date: Sun, 19 Aug 2007 13:01:24 GMT
    Server: Apache
    Content-Length: 390
    Connection: close
    Content-Type: text/html; charset=iso-8859-1

    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>400 Bad Request</title>
    </head><body>
    <h1>Bad Request</h1>
    <p>Your browser sent a request that this server could not understand.<br />
    Request header field is missing ':' separator.<br />
    <pre>
    -----------------------------myboundary</pre>
    Je pense donc que ma requette et mauvaise. Et aussi j'aimerais savoir se que ces que boundary.
    Merci

    Voici les 2 sources.

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    //client.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
     
    #define PORT 80 
    #define IP "192.168.1.1"
     
    int connected(int fd,char *ip)
    {
    	struct hostent *he;
            struct sockaddr_in their_addr;
     
    	if ((he=gethostbyname(ip)) == NULL) {
    		herror("gethostbyname");
    		exit(1);
    	}
     
    	printf("[+] Connect to %s port %d\n",ip,PORT);
     
    	if ((fd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
    		perror("[+] Socket");
    		exit(1);
    	}
     
    	their_addr.sin_family = AF_INET;
    	their_addr.sin_port = htons(PORT);
    	their_addr.sin_addr = *((struct in_addr *)he->h_addr);
    	memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero);
     
    	if (connect(fd, (struct sockaddr *)&their_addr,sizeof their_addr) == -1) {
    		perror("[+] Connect");
    		exit(1);
    	}else{printf("[+] Connected!\n\n");}
     
    	return(fd);
    }
     
    int packet(int fd,char *buffer){
    	if(write(fd,buffer,strlen(buffer))==-1){
    		perror("[+] Write ");
    		return 0;
    	}else{printf("[+] Requete send!\n");}
     
    	return 1;
    }
     
    int requete(int fd)
    {
        char *requete_post =    "POST /~y0ug/up.php HTTP/1.1\r\n"\
    			"User-Agent: Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.1.6) Gecko/20070805 Firefox/2.0.0.6\r\n"\
                            "Host: 192.168.1.1\r\n"\
    			"Connection: Keep-Alive\r\n"\
                            "Cache-Control: no-cache\r\n";
     
     
        char *requete_boundary =    "Content-Type: multipart/form-data; boundary=-----------------------------myboundary\r\n";
        char *requete_rn = "Content-Length: 178"\
        		       "\r\n";
     
        char *requete_boundary2 =	"\r\n"\
        				"-----------------------------myboundary\r\n"\
    				"Content-Disposition: form-data; name='file'; filename='fichier.txt'\r\n"\
    				"Content-Type: text/plain\r\n"\
    				"\r\n";
     
        char *fichier = 		"mon super fichier ....";
     
        char *fin =		"-----------------------------myboundary\r\n"\
    			"Content-Disposition: form-data; name='envoyer'\r\n"\
    			"\r\n"\
    			"send\r\n"\
    			"-----------------------------myboundary--\r\n";
     
        packet(fd,requete_post);
        packet(fd,requete_boundary);
        packet(fd,requete_rn);
        //packet(fd,requete_boundary2);
        //packet(fd,fichier);
        packet(fd,fin);
     
     
     
     
    	return 1;
    }
     
    int receive(int fd)
    {
    	char *buffer[512];
    	int a=recv(fd,buffer,511,0);
    	printf("Receive:\n%s\n",buffer);
    }
     
    int main (int argc, char **argv)
    {
    	printf("[+] PORT: %d\n",PORT);
    	printf("[+] IP: %s\n\n",IP);
     
    	int fd = connected(fd,IP);
    	requete(fd);
    	receive(fd);
    	close(fd);
    }
    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
    <?php
    //up.php
    $dossier = '';
    $fichier = basename($_FILES['file']['name']);
    $taille = filesize($_FILES['file']['tmp_name']);
    $extensions = array('.txt');
    $extension = strrchr($_FILES['file']['name'], '.'); 
    $envoyer = $_POST['envoyer'];
    /*
    if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
    {
         $erreur = 'Just txt file!';
    }
    */
    echo 'Fichier: '.$fichier.'\n';
    echo 'Taille: '.$taille.'\n';
    echo 'Envoyer: '.$envoyer.'\n';
    print_r($_FILES);
     
    if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
    {
         if(move_uploaded_file($_FILES['file']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload OK!';
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Upload FAILED!';
         }
    }
    else
    {
         echo $erreur;
    }
    ?>

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par y0ug Voir le message
    Je pense donc que ma requette et mauvaise. Et aussi j'aimerais savoir se que ces que boundary.
    <...>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int requete(int fd)
    {
        char *requete_post =    "POST /~y0ug/up.php HTTP/1.1\r\n"\
    			"User-Agent: Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.1.6) Gecko/20070805 Firefox/2.0.0.6\r\n"\
                            "Host: 192.168.1.1\r\n"\
    			"Connection: Keep-Alive\r\n"\
                            "Cache-Control: no-cache\r\n";
     
    <...>
     
        packet(fd,requete_post);
    C'est pas un problème de langage C.
    [hors-sujet]
    Les requêtes http doivent être terminées par une ligne vide "\r\n". Est-ce bien le cas ?
    [/hors-sujet]
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    oué ces vrais que ces plus html. Mais je savais pas ou poster. Oué je pense que sa doit etre just une petit erreur a un endroit mais je vois pas ou ces je comprend pas trop leur principe des "\r\n".

    Je vais continué un pe a cherché encore.
    Sinon je vais me rabattre sur la libcurl.

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par y0ug Voir le message
    oué ces vrais que ces plus html.
    Quoi ? Qu'est-ce que HTML à a voir là-dedans ? Je te parle du protocole HTTP. Si tu ne maitrises pas ces termes, c'est pas la peine d'aller plus loin. Wikipaedia est ton amie...
    Mais je savais pas ou poster.
    Alors tu postes n'importe où ? Et le forum "programmation réseau" ? C'est de la déco ?
    Oué je pense que sa doit etre just une petit erreur a un endroit mais je vois pas ou ces je comprend pas trop leur principe des "\r\n".
    Ce sont de marqueurs de fin de ligne. (CR/LF)
    La norme HTTP dit qu'une requête doit être terminée par une ligne vide, c'est à dire qu'lle ne contient que CR/LF :
    • "\r\n" est une ligne vide.
    • "mon texte\r\n" n'est pas une ligne vide.

    Dans le code que tu as montré, les requêtes ne se terminent pas par une ligne vide. Elles ne sont donc pas comprises par le serveur qui ne détecte pas la fin de requête.
    Sinon je vais me rabattre sur la libcurl.
    Bah, si tu n'as pas de solides notions de HTTP, c'est pas la peine...
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Probleme avec une requete mise a jour
    Par mael94420 dans le forum ASP
    Réponses: 2
    Dernier message: 08/03/2006, 20h56
  2. Probleme avec une requete de selection
    Par vaness59199 dans le forum ASP
    Réponses: 2
    Dernier message: 03/10/2005, 22h42
  3. [weblogic 8.1][JDBC] Probleme avec une requete
    Par Sniper37 dans le forum Weblogic
    Réponses: 3
    Dernier message: 08/04/2005, 11h11
  4. probleme avec une requete full text
    Par maxxou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2005, 17h20
  5. au secour probleme avec une requete...
    Par soufiane59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/09/2003, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo