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

Windows Discussion :

[HTTP C++] Comment télécharger une image?


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Par défaut [HTTP C++] Comment télécharger une image?
    Bonjour,

    Dans un post précédent, je cherchais à savoir comment lancer une requête HTTP en c++. Je parviens donc maintenant à me connecter sur un serveur et lancer une requête. Ma requête consiste en fait à demander à télécharger une image qui se trouve à l'adresse 'www.monsite.com/image.gif'. Je me connecte donc sur le nom de domaine 'www.monsite.com' (connexion réussie) puis j'envoie ma requête HTTP comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    send(MySocket,"GET /image.gif HTTP/1.1\n\r\n\r",27,0);
    Le problème est que le serveur me répond avec le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HTTP/1.1 400 Bad Request Date: Sun, 24 Feb 2008 00:02:52 GMT Server: Apache Content-Length: 226 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 />
    </p>
    </body></html>
    Quelqu'un peut-t-il m'éclairer sur mon erreur? Merci!

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Par défaut
    J'ai presque resolu mon probleme. J'ai remplace mon code et ma requete par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char Request[]="GET /image.gif HTTP/1.1\r\nHost: www.monsite.com\r\n\r\n";
    send(MySocket,Request,strlen(Request));
    char Buffer[100000];
    int Size=recv(MySocket,Buffer,100000,0);
    Maintenant le serveur me renvoit le status "OK (code 200). Le probleme est que le nombre d'octets que je recois dans ma variable Size est inferieur au nombre d'octets indique dans la reponse du serveur. Plus precisement, Size=10220 alors que le serveur repond "Content-Length: 12205". Le resultat est que l'image que je recois est tronquee. Je sais que les fonctions 'send' et 'recv' ne transmettent pas toujours le nombre d'octets attendus, et qu'il faut donc contrôler systématiquement la valeur renvoyée par la fonction, mais le problème est que je reçois systématiquement 10220 octets, jamais un de plus.

    Quelqu'un peut-il m'aider?

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Par défaut
    Personne ne voit où est mon erreur?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Et si tu refais un recv() quelques millisecondes plus tard, qu'est-ce que ça dit ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Par défaut
    Oui, apparement la réponse est morcelée... J'essaye de mettre au point une procédure qui fait un 'recv' jusqu'à ce que la totalité de la réponse soit reçue, et, je vous tiens au courant.

  6. #6
    Membre expérimenté Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Par défaut
    Essaye libcurl. http://curl.haxx.se/

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/12/2014, 01h19
  2. Réponses: 3
    Dernier message: 15/10/2012, 15h19
  3. Réponses: 9
    Dernier message: 17/09/2009, 10h31
  4. Réponses: 4
    Dernier message: 02/06/2006, 22h46
  5. Comment afficher une image à la volée via http ?
    Par reg11 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 30/06/2005, 09h44

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