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

WinDev Discussion :

Problème d'utilisation de l'API cURL


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Par défaut Problème d'utilisation de l'API cURL
    Bonjour, à tous,

    Je désirerais utiliser l'API libcurl.dll fournis avec cURL pour effectuer des transferts SFTP.

    http://curl.haxx.se/libcurl/

    Quelqu'un a-t-il déjà utiliser cette API ?

    Mes connaissances en matière d'utilisation d'API sont proches de zéro, mais j'ai tenté de reproduire (sans succès) un des exemples fournis qui permettent de récupère le code HTML d'une page.

    Exemple Source C :
    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
     
    #include <stdio.h>
    #include <curl/curl.h>
     
    int main(void)
     {
       CURL *curl;
       CURLcode res;
     
       curl = curl_easy_init();
       if(curl) {
                  curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
                  res = curl_easy_perform(curl);
     
                 /* always cleanup */
                curl_easy_cleanup(curl);
       }
     return 0;
    }
    Mon Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    nEasyhandle est un entier sans signe
    nCURLcode est un entier sans signe
     
    nCURLcode = AppelDLL32("libcurl", "curl_global_init", "CURL_GLOBAL_ALL")
    nCURLcode = AppelDLL32("libcurl", "curl_global_init", "CURL_GLOBAL_WIN32")
     
    nCURLcode = AppelDLL32("libcurl", "curl_easy_setopt", nEasyhandle, "CURLOPT_URL", "http://www.google.fr/")
     
    nCURLcode = AppelDLL32("libcurl", "curl_easy_perform", nEasyhandle)
     
    AppelDLL32("libcurl", "curl_easy_cleanup", nEasyhandle)
    Déjà, sur la ligne suivante, je récupère un code d'erreur 2 qui semble indiquer une erreur d'initialisation. (CURLE_FAILED_INIT (2))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nCURLcode = AppelDLL32("libcurl", "curl_easy_setopt", nEasyhandle, "CURLOPT_URL", "http://www.google.fr/")
    Pour le moment je ne parviens pas à avancer plus en avant.

    Par avance merci pour vos conseils.

  2. #2
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Tu dois remplacer tes parametres ( "CURL_GLOBAL_ALL" par exemple), par sa vrai valeur définie dans ton header file C.

    Il doit y avoir quelque chose du genre :

    #define CURL_GLOBAL_ALL 4

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Par défaut
    Bonjour, et merci beaucoup de t'intéresser a mon problème.

    Sauf erreur de ma part il est défini dans curl.h :

    Définition :
    http://curl.haxx.se/lxr/source/inclu...l/curl.h#L1598

    Mais c'est loin d'être simple pour moi comme définition, doit-on créer une structure ?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Bonjour,

    Je crois que ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #define CURL_GLOBAL_SSL (1<<0)
    #define CURL_GLOBAL_WIN32 (1<<1)
    #define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32)
    #define CURL_GLOBAL_NOTHING 0
    #define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
    Pourrait-être traduit ainsi en WLangage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CONSTANT
        CURL_GLOBAL_SSL = 1
        CURL_GLOBAL_WIN32 = 2
        CURL_GLOBAL_ALL = 3
        CURL_GLOBAL_NOTHING = 0
        CURL_GLOBAL_DEFAULT = 3
    FIN
    Et là CURLOPT_URL, toujours dans ce curl.h, c'est vraiment pour les masos des macros !
    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
    538 /* long may be 32 or 64 bits, but we should never depend on anything else
    539    but 32 */
    540 #define CURLOPTTYPE_LONG          0
    541 #define CURLOPTTYPE_OBJECTPOINT   10000
    542 #define CURLOPTTYPE_FUNCTIONPOINT 20000
    543 #define CURLOPTTYPE_OFF_T         30000
    544 
    545 /* name is uppercase CURLOPT_<name>,
    546    type is one of the defined CURLOPTTYPE_<type>
    547    number is unique identifier */
    548 #ifdef CINIT
    549 #undef CINIT
    550 #endif
    551 
    552 #ifdef CURL_ISOCPP
    553 #define CINIT(name,type,number) CURLOPT_ ## name = CURLOPTTYPE_ ## type + number
    554 #else
    555 /* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
    556 #define LONG          CURLOPTTYPE_LONG
    557 #define OBJECTPOINT   CURLOPTTYPE_OBJECTPOINT
    558 #define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
    559 #define OFF_T         CURLOPTTYPE_OFF_T
    560 #define CINIT(name,type,number) CURLOPT_/**/name = type + number
    561 #endif
    562 
    563 /*
    564  * This macro-mania below setups the CURLOPT_[what] enum, to be used with
    565  * curl_easy_setopt(). The first argument in the CINIT() macro is the [what]
    566  * word.
    567  */
    568 
    569 typedef enum {
    570   /* This is the FILE * or void * the regular output should be written to. */
    571   CINIT(FILE, OBJECTPOINT, 1),
    572 
    573   /* The full URL to get/put */
    574   CINIT(URL,  OBJECTPOINT, 2),
    
    // je vous épargne les quelques lignes !!!
    
    1148     /* "name" and "pwd" to use with Proxy when fetching. */
    1149   CINIT(PROXYUSERNAME, OBJECTPOINT, 175),
    1150   CINIT(PROXYPASSWORD, OBJECTPOINT, 176),
    1151 
    1152   CURLOPT_LASTENTRY /* the last unused */
    1153 } CURLoption;
    Si j'ai bien lu, ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CURLOPT_URL = CURLOPTTYPE_OBJECTPOINT + 2
    Donc dans les constantes WLangage, on rajoute:
    J'imagine que tu auras d'autres codes à "deviner", alors bon courage et, éventuellement, renseigne toi sur le fonctionnement du pré-processeur C qui est utilisé pour ces directives et macros.
    _

  5. #5
    Membre Expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Par défaut
    le plus simple pour moi serait de récupérer l'api C, d'en faire une dll et de l'appeler depuis WD. Il doit exister des dll pour d'autres langages (delphi, VB,...), voir de ce coté si tu ne peux pas les réutiliser.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Par défaut
    Merci beaucoup de votre aide a tous !

    Cela va me donner une bonne base de travail pour "deviner" le reste je vais étudier ça avec attention.

    Il existe pleins d'examples pour de nombreux langages (sauf Windev) dont VB disponible a la page suivante :

    http://curl.haxx.se/libcurl/

    Lien direct pour VB :

    http://sourceforge.net/projects/libcurl-vb/

    Cela dit je ne comprends pas pourquoi je dois définir les valeurs des paramètres et non pas les utiliser directement alors que je fais appel à une DLL qui est déjà compilé et qui doit déjà contenir ces définitions ?

Discussions similaires

  1. Problème sur l'utilisation de l'aPi en 1.3
    Par ncroiset dans le forum IGN API Géoportail
    Réponses: 8
    Dernier message: 11/06/2012, 13h48
  2. problème d'utilisation Curl
    Par sculpteur dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 06/05/2011, 17h35
  3. (Problème) Utilisation de l'API mySQL [Delphi 2005 Perso]
    Par will-scs dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/08/2005, 18h26
  4. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35

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