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 :

Requête POST http C ?


Sujet :

Réseau C

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Par défaut Requête POST http C ?
    Bonjour à tous,

    Je souhaite envoyer un fichier vers mon local host par une requête POST en http écrite en C.

    J'arrive bien à me connecter au serveur, j'ai tester avec des requetes GET et ça fonctionne super bien.

    j'ai fait un script en php pour lire mon fichier uploader. Avec un formulaire html ça marche nikel.

    Quelqu'un pourra t'il me dire comment faire pour avoir l'équivalent du formulaire en C?

    Pour le moment, je procède comme suit,

    1- j'ouvre mon fichier avec pf = fopen(fichier,"rb"),
    2- je lit les données avec un fread(donnees,1,sizeFile,pf)
    3- je construit ma requête avec un sprintf

    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
    sprintf(line,	"POST <a href="http://localhost/upload.php" target="_blank">http://localhost/upload.php</a> HTTP/1.1\r\n"
    					"Host: localhost \r\n"
    					"Accept:text/xml, application/xml, text/html, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, application/pdf, */*\r\n"
    					"Accept-Encoding: gzip, deflate\r\n"
    					"Accept-charset: ISO-8859-1, utf-8\r\n"
    					"Keep-Alive: 300 \r\n"
    					"Referer: http://localhost\r\n"
    					"Content-Type: multipart/form-data; boundary=----BOUNDARY-TEST----\r\n"
    					"Content-length: %d\r\n"
    					"\r\n"
    					"------BOUNDARY-TEST----\r\n"
    					"Content-Disposition: form-data; name=\"fileupload\"; filename=\"%s\"\r\n"
    					"Content-Type: image/pjpeg\r\n"
    					"%c\r\n"
    					"\r\n"
    					"------BOUNDARY-TEST------\r\n"
    					"\r\n"
    					,sizeFile,fichier, **donnees);
    3- j'envoie ma requete avec SockSend(to_server_socket, line, strlen(line), 0)

    Je pense que mon problème vient de la construction de ma requête. pourriez vous svp me dire comment insérer les données binaires récupérées lors de la lecture du fichier à ma requête.

    Merci à tous d'avance.

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    - Dans la ligne POST ..., on ne spécifie pas une URL mais le chemin sur le serveur (puisqu'on est déjà connecté ...). Quelque chose comme /upload.php (-> le fichier upload.php à la racine (/) du serveur).

    - Il manque un espace après les : dans Accept

    - Même si ce n'est pas obligatoire, c'est mieux de mettre un / pour terminer le nom d'un répertoire. Par exemple : http://localhost/

    - Content-length doit être égal à la taille des données (c'est-à-dire tout ce qui suit la ligne vide après l'en-tête), pas la taille du fichier à envoyer (d'ailleurs c'est logique vu qu'on peut envoyer plusieurs fichiers en même temps ...)

    - sprintf sert à formater du texte. Pour copier des données binaires vers un buffer, on utilise memcpy. Et enfin, strlen s'arrête à la rencontre du premier caractère '\0'. On ne peut l'utiliser que sur des chaînes de caractères, pas sur des données binaires.

    - Conseil : Commence avec un fichier texte (text/plain) comme ça tu travailles avec une requête 100% texte. C'est la même chose pour envoyer n'importe quel autre fichier sauf qu'il faut faire attention aux strlen et compagnie lorsqu'on ne manipule pas que du texte. Et enfin, pour une image JPEG ce n'est pas image/pjpeg mais image/jpeg.

    - Pense aux balises code la prochaine fois.

  3. #3
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Par défaut
    Merci pour ta réponse.

    Je vais essayer tout ça.

Discussions similaires

  1. Problème de requête POST HTTP
    Par 2001hal dans le forum Android
    Réponses: 12
    Dernier message: 08/08/2014, 18h46
  2. Requête POST sur HTTPS
    Par zentaf dans le forum Réseau
    Réponses: 0
    Dernier message: 02/01/2014, 11h57
  3. Requête POST HTTPS
    Par plieuse dans le forum Services Web
    Réponses: 2
    Dernier message: 28/10/2013, 14h49
  4. Apache HTTP Client : Corps d'une requéte POST
    Par albert55 dans le forum Général Java
    Réponses: 3
    Dernier message: 12/07/2013, 16h43
  5. Comment envoyer une requête POST via HTTP ?
    Par pdtor dans le forum C++
    Réponses: 2
    Dernier message: 13/09/2005, 05h54

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