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 :

problème avec ftpgetfile


Sujet :

Windows

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut problème avec ftpgetfile
    Bien le bonjour,
    J'ai un petit souci: Ftpgetfile marche quand je suis connecté depuis mon bureau (succès = True) mais pas quand je me connecte depuis un autre (succès=false). Avez-vous des éléments de réponse?

    Merci!

    Voici mon code:

    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
    Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" ( _
        ByVal hInternetSession As Long, ByVal sServerName As String, _
         ByVal nServerPort As Integer, ByVal sUsername As String, _
         ByVal sPassword As String, ByVal lService As Long, _
         ByVal lFlags As Long, ByVal lContext As Long) As Long
    Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" ( _
         ByVal sAgent As String, ByVal lAccessType As Long, _
         ByVal sProxyName As String, _
         ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
    Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias _
         "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, _
         ByVal lpszDirectory As String) As Boolean
    Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" ( _
         ByVal hConnect As Long, _
         ByVal lpszRemoteFile As String, _
         ByVal lpszNewFile As String, _
         ByVal fFailIfExists As Long, _
         ByVal dwFlagsAndAttributes As Long, _
         ByVal dwFlags As Long, _
         ByRef dwContext As Long) As Boolean
    
    Sub cherche()
    Dim Nom As String
    Dim chemin As String
    
    Nom = ActiveCell.Value + ".xls"
    chemin = "C:\dossier1\" + Nom
    
    internet_ok = InternetOpen("", 1, "", "", 0)
    If internet_ok Then
        ftp_ok = InternetConnect(internet_ok, "serveur.com", 21, "login", "motdepasse", 1, 0, 0)
        If FtpSetCurrentDirectory(ftp_ok, "/dossier2") Then
            succès = FtpGetFile(ftp_ok, Nom, chemin, False, 0, &H0, 0)
        End If
    
    End If
    
    If succès = False Then MsgBox ("le fichier '" + Nom + "' n'a pas été trouvé!")
    
    If succès Then
        Workbooks.Open Filename:=chemin
    End If
    
    
    End Sub

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut


    Problèmes de droits du compte Windows courant, de firewall Windows, de restrictions d'accès niveau IP côté serveur FTP, d'authentification NT, que sais-je encore...

    Si tu arrives à te connecter au FTP mais que tu es éjecté sur un transfert, c'est certainement un problème de firewall / filtrage serveur. Essaie avec un client FTP "normal" pour voir si tu n'aurais pas plus de détails sur l'erreur, et/ou d'appeler InternetGetLastResponseInfo dans ton code autant de fois que nécessaire, afin d'afficher l'intégralité des messages d'erreurs ayant provoqué l'échec du transfert.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci,

    Je suis un peu novice en la matière alors je ne connais pas tous les tenants, mais le même code fonctionne depuis mon bureau et avec le même PC (j'ai un ordi portable). Seul un changement de connexion provoque l'erreur qui ne peut donc pas venir du serveur.

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Grandbo Voir le message
    Seul un changement de connexion provoque l'erreur qui ne peut donc pas venir du serveur.
    On parie ?
    Essaie d'accéder à une messagerie Orange depuis une ligne Free, tu verras si un serveur ne peut pas bloquer certaines IP...

    Sur le PC qui ne "marche pas", essaie avec un client FTP classique comme FileZilla, et regarde ses messages d'erreur. De plus, modifie ton code pour appeler InternetGetLastResponseInfo en cas d'échec des commandes INet, de façon à avoir des messages d'erreur explicites.

    Une fois ceci fait, donnes-nous les messages d'erreur en question : on ne pourra pas t'aider sans ça, car il y a bien trop de causes possibles.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Alors non je ne crois pas que je vais parier.

    Comme je suis effectivement un novice, je ne sais pas comment insérer InternetGetLastResponseInfo dans mon code. Il faut sans doute que je définisse la fonction?

    Merci encore.

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Grandbo Voir le message
    Comme je suis effectivement un novice, je ne sais pas comment insérer InternetGetLastResponseInfo dans mon code. Il faut sans doute que je définisse la fonction?
    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    succès = FtpGetFile(ftp_ok, Nom, chemin, False, 0, &H0, 0)
    If succès = FALSE Then
      InternetGetLastResponseInfo(.......)
    End If
    Remplaces les ..... par les variables adéquates (cf. cette page pour la doc de la fonction).

    Avec une déclaration qui doit être celle-là, normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Declare Function InternetGetLastResponseInfo Lib "wininet.dll" Alias _
         "InternetGetLastResponseInfoA" (ByRef lpdwError As Long, _
         ByVal lpszBuffer As String, ByRef lpdwBufferLength As Long ) As Boolean
    Pour le reste, je ne suis pas spécialiste du VB, loin de là, donc il est possible que l'importation ci-dessus ne soit pas parfaite. A faire confirmer / vérifier par quelqu'un connaissant bien ce langage et l'interfaçage avec l'API Win32.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    J'ai mis ce code là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     If succès = False Then
        Dim lErr As Long, sErr As String, lenBuf As Long
       
        InternetGetLastResponseInfo lErr, sErr, lenBuf
       
        sErr = String(lenBuf, 0)
      
        InternetGetLastResponseInfo lErr, sErr, lenBuf
        
        MsgBox "Error " + CStr(lErr) + ": " + sErr, vbOKOnly + vbCritical
            End If
    qui me renvoie le message

    Error 0: 200 Switching to Binary Mode
    500: Illegal PORT Command
    500: Unknown Command

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Grandbo Voir le message
    Error 0: 200 Switching to Binary Mode
    500: Illegal PORT Command
    500: Unknown Command
    Comme tu t'en rends compte, cette fonction renvoie la liste des derniers messages (d'erreur ou pas, le "200 Switching to Binary Mode" est parfaitement correct et légitime par exemple).

    Ta commande PORT a échoué, ce qui veut dire que ton paramètre &H0 fourni à FtpGetFile est peut-être foireux... Normalement, il faut passer la constante FTP_TRANSFER_TYPE_BINARY uniquement.

    Côté protocole FTP lui-même, le fait qu'un PORT échoue signifie souvent un firewall actif, ou une restriction serveur. Essaie de récupérer le fichier en question via un client FTP classique, et regarde ce qu'il te donne comme messages : ils seront peut-être plus explicites.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Normalement, il faut passer la constante FTP_TRANSFER_TYPE_BINARY uniquement.
    Ouh là, c'est du chinois pour moi. Qu'est-ce que je dois changer dans le code?

    Essaie de récupérer le fichier en question via un client FTP classique, et regarde ce qu'il te donne comme messages : ils seront peut-être plus explicites.
    Qu'est-ce qu'un client ftp classique?

    Hé oui, je suis pas un champion du monde. Merci encore 1000 fois.

  10. #10
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Grandbo Voir le message
    Ouh là, c'est du chinois pour moi. Qu'est-ce que je dois changer dans le code?
    Cette constante vaut 2 : #define FTP_TRANSFER_TYPE_BINARY 0x00000002
    Donc, à la place de ton "&H0" franchement suspect, mets "2" directement, ça ne peut pas être pire de toutes façons... Mais bon, si un "pro" du VB pouvait donner son avis, ça m'arrangerait aussi.

    Citation Envoyé par Grandbo Voir le message
    Qu'est-ce qu'un client ftp classique?
    Je t'en ai cité un, déjà : FileZilla. C'est un logiciel permettant d'accéder à un serveur FTP.

    Citation Envoyé par Grandbo Voir le message
    Hé oui, je suis pas un champion du monde. Merci encore 1000 fois.
    Lis les réponses entièrement quand même, ça fait deux fois que je te dis de faire le test avec un client FTP...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Salut, me revoilà.

    Nous avons mis un fichier sur le serveur avec Filezilla et voilà ce que ça donne:

    Commande : USER Login
    Réponse : 331 Please specify the password.
    Commande : PASS ********
    Réponse : 230 Login successful.
    Commande : OPTS UTF8 ON
    Réponse : 200 Always in UTF8 mode.
    Statut : Connecté
    Statut : Démarrage de l'envoi de C:\dossier1\fichier.xls
    Commande : CWD /dossier2
    Réponse : 250 Directory successfully changed.
    Commande : TYPE I
    Réponse : 200 Switching to Binary mode.
    Commande : PASV
    Réponse : 227 Entering Passive Mode (88,191,79,142,107,150)
    Commande : STOR fichier.xls
    Réponse : 150 Ok to send data.
    Réponse : 226 File receive OK.
    Statut : Transfert de fichier réussi
    Statut : Déconnecté du serveur

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Pardon, ouh là la fatigue. Il s'agit là d'une mise sur le serveur. Voici les logs pour un retrait du fichier:

    Commande : USER login
    Réponse : 331 Please specify the password.
    Commande : PASS ********
    Réponse : 230 Login successful.
    Commande : OPTS UTF8 ON
    Réponse : 200 Always in UTF8 mode.
    Statut : Connecté
    Statut : Démarrage du téléchargement de /dossier2/fichier.xls
    Commande : CWD /dossier2
    Réponse : 250 Directory successfully changed.
    Commande : TYPE I
    Réponse : 200 Switching to Binary mode.
    Commande : PASV
    Réponse : 227 Entering Passive Mode (88,191,79,142,63,22)
    Commande : RETR fichier.xls
    Réponse : 150 Opening BINARY mode data connection for fichier.xls (70102 bytes).
    Réponse : 226 File send OK.
    Statut : Transfert de fichier réussi

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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