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 :

Probleme avec libcurl API [WD7.5]


Sujet :

WinDev

  1. #1
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut Probleme avec libcurl API
    Bonjour,


    J'essaie d'utiliser la librairie libcurl (API) : http://curl.haxx.se/

    J'ai écrit un bout de code pour uploader un fichier vers un serveur FTP mais ça ne fonctionne pas. Pouvez vous m'aider ?
    La connexion s'établit au serveur mais le transfert ne se fait pas.
    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
    NEasyhandle est un entier
    strCheminFic est une chaîne
    strNomFic est une chaîne
     
    strNomFic = "upload.txt"
    strCheminFic = "C:\WINXP\Profiles\25099819\Desktop\libcurl\";
     
    NEasyhandle = AppelDLL32(fRepExe()+"\libcurl","curl_easy_init")
     
    SI NEasyhandle = 0 ALORS
        Erreur(ErreurInfo())
    SINON   
        iReturn est un entier sans signe
        iErreur est un entier   
     
        iErreur = AppelDLL32("libcurl", "curl_easy_setopt", NEasyhandle, CURLOPT_URL, "ftp://vince:password@127.0.0.1/" + strNomFic)
        lblInfo = lblInfo + "CURLOPT_URL = " + iErreur + RC   
     
        iErreur = AppelDLL32("libcurl", "curl_easy_setopt", NEasyhandle, CURLOPT_UPLOAD, "1")
        lblInfo = lblInfo + "CURLOPT_UPLOAD = " + iErreur + RC
     
        iFichier est un entier
        iFichier = fOuvre(strCheminFic + strNomFic, foLecture )
        lblInfo = lblInfo + "Pointeur fichier : " + &iFichier + " - " +fTaille(strCheminFic + strNomFic) + " Octets" + RC
     
        iErreur = AppelDLL32("libcurl", "curl_easy_setopt", NEasyhandle, CURLOPT_INFILE, iFichier )
        lblInfo = lblInfo + "CURLOPT_INFILE = " + iErreur + RC
     
        iErreur =  AppelDLL32("libcurl", "curl_easy_setopt", NEasyhandle, CURLOPT_INFILESIZE, fTaille(strCheminFic + strNomFic) )
        lblInfo = lblInfo + "CURLOPT_INFILESIZE = " + iErreur + RC       
     
        //------------------------- TRANSFERT ------------------------   
        iErreur = AppelDLL32("libcurl", "curl_easy_perform",NEasyhandle)
        lblInfo = lblInfo + "curl_easy_perform = " + iErreur + RC
        //------------------------------------------------------------
     
        fFerme(iFichier)
     
        AppelDLL32("libcurl", "curl_easy_cleanup",NEasyhandle)//fermeture de la session curl
     
        DéchargeDLL(NEasyhandle)
     
    FIN
    Merci d'avance de votre aide

  2. #2
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    Hello,
    J'ai regardé votre code et j'y vois peut-être une mauvaise interpretation avec votre variable IFICHIER (qui est une constante de WINDEV)
    Il faut donc remplacer Ifichier par IDFICHIER (qui me semble plus parlant) et de refaire les tests.
    En effet, vous utilisez le pointeur '&' et celui-ci doit pointer sur la constante et non sur l'Id d'ouverture fichier.
    A voir donc
    Amicalement
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  3. #3
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    Merci de ta réponse (dsl je tutoie tout le monde sur Internet ),

    Quand tu parle de "ifichier" tu veux parler de cette ligne :
    iErreur = AppelDLL32("libcurl", "curl_easy_setopt", NEasyhandle, CURLOPT_INFILE, iFichier )

    Je ne savais pas que iFichier était une constante de Windev.
    J'ai changé ma variable par iFich, mais ça ne marche toujours pas. L'upload du fichier ne se fait pas .

    Voici le code comme je l'ai changé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (...)
    iFich est un entier
    iFich = fOuvre(strCheminFic + strNomFic, foLecture )
    iErreur = AppelDLL32("libcurl", "curl_easy_setopt", NEasyhandle, CURLOPT_INFILE, iFich )
    (...)
    Voici la trace du code complet modifié suite au précédent conseil coté serveur FTP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [09:36:15] - [71] Connect to 127.0.0.1. Get Username.
    [09:36:15] - [71] KEYWORD: USER -- PARAMS: vince
    [09:36:15] - [71] KEYWORD: PASS -- PARAMS:  #####
    [09:36:15] - [71] User VINCE Connected
    [09:36:15] - [71] VINCE: Current Directory: D:\FTP\
    [09:36:15] - [71] KEYWORD: PWD -- PARAMS: 
    [09:36:15] - [71] KEYWORD: EPSV -- PARAMS: 
    [09:36:15] - [71] KEYWORD: PASV -- PARAMS: 
    [09:36:15] - [71] KEYWORD: TYPE -- PARAMS: I
    [09:36:15] - [71] KEYWORD: STOR -- PARAMS: upload.txt
    [09:36:15] - [71] VINCE: Start Upload of D:\FTP\upload.txt
    [09:36:19] - [71] VINCE: Upload Fail of D:\FTP\upload.txt (0,00 K/S -    0 bytes)
    [09:36:19] - [71] Client VINCE, 127.0.0.1 Disconnected (00:00:04 Min)

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

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut
    VINCE a-t-il les droits d'écriture sur le serveur FTP ?
    Emmanuel Lecoester
    => joomla addict.

  5. #5
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    Citation Envoyé par Emmanuel Lecoester Voir le message
    VINCE a-t-il les droits d'écriture sur le serveur FTP ?
    Oui il a le droit, j'ai testé avec un client FTP (FileZilla) et ce compte.

  6. #6
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    Hello,
    Je résume la situation, vous avez un serveur FTP sur une machine (la meme que le developpement, au prime abord) puisque l'adresse est 127.0.0.1
    J'ai regardé la doc de cURL, très complète et bien faite. Cela semble etre une bonne interface. Toutefois, les fonctions de Windev en matière de FTP sont également très bien faites. Elles permettent de récupérer des fichiers FTP sur des serveurs, que la connexion soit par accès distant ou ADSL.
    A ce stade, je ne puis tester ce petit logiciel pleins de promesses, me semble-t-il. Aussi, pourquoi n'essayez-vous pas de faire la même chose avec les procedure FTP (entre autres):
    FTPENVOIS
    FTPRECUPERE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	Message("DEMANDE DE CONNEXION AU SERVEUR FTP")
    	ftp_idconnexion = FTPConnecte(SansEspace(CLIENTS1.FTP_ADRESSE),FTP_LOGGIN,FTP_PASSWORD)//,ftp_numport,faux)
    	// regarde si idconnexion valide
    	SI ftp_idconnexion <> -1 ALORS
    		SI PAS FTPRécupère (ftp_IdConnexion,sFichierServeur,sFichierClient,"TransfertFTP") ALORS
    			Erreur("Echec lors du transfert de "+sFichierServeur +" vers " + sFichierClient)
    			Info(ErreurInfo(errMessage))
    			resultat = Faux
    		FIN
     
                 FIN
    L'avantage, c'est de pouvoir tout gérer dans windev, sans avoir recours à des logiciels externes. Je sais que ma réponse ne va pas directement à la problèmatique, mais c'est une autre piste. D'autant que les parametres passés dans cURL sont identiques à ceux passé dans les fonction FTP.
    En quelques lignes, vous pouvez recrééer les mêmes fonction que cURL...
    Autre piste à creuser
    Amicalement
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  7. #7
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    En fait j'ai déjà posté un topic expliquant mes attentes quand à la manière de me connecter au serveur FTP : http://www.developpez.net/forums/d88...uite-ftp-http/

    En effet les fonctions FTP de Windev ne gèrent pas l'authentification par Proxy NTLM (MSAP) c'est pourquoi je me suis tourné vers libcurl qui semble le faire.
    curl is a command line tool for transferring data with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP, SMTP, POP3 and RTSP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer resume, proxy tunneling and a busload of other useful tricks.
    Mais je n'arrive même pas à utiliser les fonctions de base comme envoyer un fichier sur le serveur FTP. D'où ma demande d'aide...

  8. #8
    Membre confirmé
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Points : 492
    Points
    492
    Par défaut
    Essaye plutot comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    iErreur = AppelDLL32("libcurl", "curl_easy_setopt", NEasyhandle, CURLOPT_URL, "ftp://127.0.0.1/" + strNomFic)
    iErreur = AppelDLL32("libcurl", "curl_easy_setopt",NEasyhandle, CURLOPT_USERPWD, "vince:password")
    Bon courage.

    Vince

  9. #9
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    Citation Envoyé par VincentRoy Voir le message
    Essaye plutot comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    iErreur = AppelDLL32("libcurl", "curl_easy_setopt", NEasyhandle, CURLOPT_URL, "ftp://127.0.0.1/" + strNomFic)
    iErreur = AppelDLL32("libcurl", "curl_easy_setopt",NEasyhandle, CURLOPT_USERPWD, "vince:password")
    Bon courage.

    Vince
    J'ai même essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AppelDLL32("libcurl", "curl_easy_setopt", NEasyhandle, CURLOPT_URL, "ftp://127.0.0.1/" + strNomFic)
    AppelDLL32("libcurl", "curl_easy_setopt", NEasyhandle, CURLOPT_USERPWD,"vince:password")
    AppelDLL32("libcurl", "curl_easy_setopt", NEasyhandle, CURLOPT_FTPPORT, "21")
    et ça ne fonctionne pas, la connexion au serveur FTP se fait bien mais le fichier n'est pas uploadé...

  10. #10
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    Apparemment Windev ne semble pas adapté pour utiliser libcurl, je suis donc en train de développer une dll en C++ interface entre libcurl et Windev donc je déleste ce topic...

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

Discussions similaires

  1. probleme avec libcurl
    Par Jérémy Lefevre dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 20/04/2007, 13h05
  2. [Platform] Probleme avec l'API Dialog
    Par bulbo dans le forum NetBeans
    Réponses: 2
    Dernier message: 16/01/2007, 09h24
  3. Probleme avec l'API javax.comm
    Par rousni dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 16/06/2006, 12h48
  4. Petit probleme avec l'API win32
    Par spiky31 dans le forum Windows
    Réponses: 3
    Dernier message: 24/01/2006, 16h01

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