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 :

Comment utiliser CURL


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Points : 99
    Points
    99
    Par défaut Comment utiliser CURL
    Bonjour,
    Il semblerait que curl puisse être une solution à un autre thème de discussion que j'ai récemment ouvert.
    Depuis hier je me bats pour essayer de le faire marcher, voilà ce que j'ai fait:
    j'ai téléchargé ici:
    WIN32 2000/XP 7.23.1 libcurl SSL de Günter Knauf 3,07 Mo
    .
    J'ai hésité car il y en a d'autres dont une sans SSL (je ne sais pas ce que veut dire SSL et par conséquent s'il me le faut ou pas).
    N'ayant pas trouvé la méthode d'installation de cette library sur mon compilateur Borland C++ Builder version 5.5 sous Windows XP, qu'à cela ne tienne, j'ai fait autrement: j'ai copié les dll dans le même répertoire que mon .exe et j'ai chargé la dll principale et les adresses des points d'entrée des fonctions par programme et par ailleurs j'ai copié les .h dans mon répertoire, ce qui donne le bout de programme suivant qui après mise au point ne comporte aucune erreur de compilation, ni de linkage:

    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
    #include <windows.h>
    #include "curl.h"
    
    // Déclarations
    HANDLE fichsor;
    HINSTANCE hinstdll=NULL;
    typedef CURL* (WINAPI* PFNTYP1)();
    typedef INT (WINAPI* PFNTYP2)(CURL*, INT, VOID*);
    typedef INT (WINAPI* PFNTYP3)(CURL*);
    typedef INT (WINAPI* PFNTYP4)(CURL*);
    PFNTYP1 curl_init;
    PFNTYP2 curl_setopt;
    PFNTYP3 curl_perform;
    PFNTYP4 curl_cleanup;
    CURL *session;
    
    // Chargement de la library
    hinstdll = LoadLibrary("libcurl.dll");
    
    // Récupération des adresses des points d'entrée des fonctions à utiliser
    curl_init = (PFNTYP1)GetProcAddress(hinstdll, "curl_easy_init");
    curl_setopt = (PFNTYP2)GetProcAddress(hinstdll, "curl_easy_setopt");
    curl_perform = (PFNTYP3)GetProcAddress(hinstdll, "curl_easy_perform");
    curl_cleanup = (PFNTYP4)GetProcAddress(hinstdll, "curl_easy_cleanup");
    // je vous fait grâce de l'analyse de tous les codes retour, mais il n'y a aucun rejet jusqu'ici
    
    // Allons-y
    session = curl_init();
    curl_setopt(session, CURLOPT_URL, "http://web.developpez.com/");
    fichsor=CreateFile("C:/Textcurl.html",  GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL);
    curl_setopt(session, CURLOPT_WRITEDATA, fichsor);
    curl_setopt(session, CURLOPT_WRITEFUNCTION, (VOID*)WriteFile);
    curl_perform(session);
    curl_cleanup(session);
    CloseHandle(fichsor);
    A l'exécution je passe sans erreur sur toutes les fonctions jusqu'à curl_perform, je sais que curl_perform se lance car mon antivirus me demande si j'autorise mon .exe à se connecter à Internet, ce que j'autorise et quelques instant après la fenêtre de mon programme disparaît de l'écran et mon .exe disparaît du gestionnaire, mon fichier Textcurl.html est créé mais vide. Ceci se passe exactement comme lorsqu'il y a un débordement de capacité (programme qui va écrire dans les lignes de code).
    Quelqu'un aurait-il SVP une idée de la faille dans les lignes de code ci-dessus ou la library téléchargée était-elle la bonne ?
    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Tu ne peux pas passer directement WriteFile() à CURLOPT_WRITEFUNCTION, elle n'a pas le bon prototype (ni la bonne convention d'appel).

    Tu dois lui passer une fonction de ton crû qui appelle WriteFile().

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Points : 99
    Points
    99
    Par défaut Suite
    Merci pour la réponse, j'avais clos cette discussion car entre-temps il m'a été conseillé de passer par wininet, qui paraît-il fait tout. Donc depuis je me bats avec wininet que j'essaie de faire fonctionner. Je vais quand même réessayer curl avec la solution préconisée. Avant de passer à wininet j'avais quand même essayé de remplacer WriteFile par fwrite car j'avais vu sur le net plusieurs exemples en ce sens, mais chez moi le fwrite provoquait une erreur de compile.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment utiliser CURL pour exploiter Mailjet ?
    Par sami_c dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 02/12/2014, 17h41
  2. comment utiliser cURL dans php pour envoyer des données de php vers application android
    Par myaset dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 15/04/2013, 13h44
  3. [cURL] Comment utiliser libcurl et remplacer fopen
    Par Skeud007 dans le forum Bibliothèques et frameworks
    Réponses: 24
    Dernier message: 23/07/2006, 17h40
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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