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

VB.NET Discussion :

Télécharger fichier à partir d'une page web et authentification


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 339
    Par défaut Télécharger fichier à partir d'une page web et authentification
    Bonjour,
    Je cherche à télécharger un fichier à partir d'une page web qui requiert une identification.
    Après recherches j'ai tenter d'utiliser la classe WebClient comme ceci :
    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
     Function Telechargment_fichier_extranet() As String
            Dim ID As String = "XXXX", MDP As String = "XXXX"
            Dim Source As String = "http://extranet-xxxx.com/app/Effectifs/report_manager.php?report_name=specExp01&isw=2400&ish=1263&sid=tM6HGmRvZPFaSK4jx3dr"
            Dim Download As New System.Net.WebClient()
            Download.Credentials = New System.Net.NetworkCredential(ID, MDP)
            Dim CheminFichier As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\" & My.Application.Info.ProductName & "\Import_BDD_" & DateAndTime.Now.Year & "-" & DateAndTime.Now.Month & "-" & DateAndTime.Now.Day & " - " & DateAndTime.Now.Hour & "_" & DateAndTime.Now.Minute & ".txt"
            Test_Dossier(CheminFichier)
            Try
                Download.DownloadFile(Source, CheminFichier)
                Download.Dispose()
                Return CheminFichier
            Catch ex As Exception
                Return ex.Message
            End Try
        End Function
     
        Sub Test_Dossier(ByVal CheminComplet As String)
            Dim Dossier As New DirectoryInfo(Path.GetDirectoryName(CheminComplet))
            If Dossier.Exists = False Then
                Dossier.Create()
            End If
        End Sub
    La méthode DownloadFile me renvoie le code de la page au format texte.

    Dois-je utiliser une autre classe ? La classe WebRequest ? J'avoue que je nage !

    Merci par avance.

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    il me semble que les NetworkCredential c'est pour les connexions au niveau proto (Basic, NTLM, Kerberos ...). Dans le cas d'une connexion par formulaire il te faudra dans un premier temps envoyer une HTTP POST avec les user/pass et conserver le cookie contenant le SessionId fourni avec la response. Ça c'est la théorie, ça se fait très bien dans un langage où tu as totalement la main (comme le C). Pour du .NET va falloir trouver les méthodes/attributs qui vont bien. Si j'ai un peu de temps je regarde ça, ça semble marrant ^^

  3. #3
    Membre chevronné Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 339
    Par défaut
    Tout d'abord merci de ta réponse.

    Citation Envoyé par jopopmk Voir le message
    Dans le cas d'une connexion par formulaire il te faudra dans un premier temps envoyer une HTTP POST avec les user/pass et conserver le cookie contenant le SessionId fourni avec la response. Ça c'est la théorie, ça se fait très bien dans un langage où tu as totalement la main (comme le C). Pour du .NET va falloir trouver les méthodes/attributs qui vont bien.
    J'ai cherché plus d'infos sur la méthode POST. Mais j'avoue que je ne comprend pas bien. De nouveau :

    Mais j'ai trouvé ceci : https://msdn.microsoft.com/en-us/library/debx8sh9.aspx#Y1254
    Le soucis est que je ne vois pas comment transmettre l'ID et le MDP.


    Citation Envoyé par jopopmk Voir le message
    Si j'ai un peu de temps je regarde ça, ça semble marrant ^^
    Merci sincèrement de ton aide.
    Bonne journée

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Bon j'ai pas eu trop le temps aujourd'hui. Déjà il faut que tu repères la balise form dans le formulaire de connexion (tu vas sur la page et tu fais "afficher source"). Avec chrome tu peux faire click-droit "inspecter element" sur un des champs de saisi pour arriver au bon endroit. D'après l'URL que tu affiches l'ID de session est en param GET (dans l'URL, le param "sid"), mais il ne serait pas inintéressant d'avoir les infos du cookie.

  5. #5
    Membre chevronné Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 339
    Par défaut
    Je vais travailler avec sur la méthode GET.
    Ce que j'ai remarqué c'est que la partie sid="xxxx" varie à chaque fois que régénère le lien en me connectant avec mon navigateur.
    Merci encore.

  6. #6
    Membre chevronné Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 339
    Par défaut On avance sur l'authentification...
    Bonjour,
    Tout d'abord voici ce que j'obtiens lorsque j'inspecte le formulaire de la page web :
    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
    <form name="formu" action="accueil.php" method="POST">
           <input id="bool_force_session" name="bool_force_session" value="" type="hidden">
    <input id="int_screen_width" name="int_screen_width" value="2399" type="hidden">
    <input id="int_screen_height" name="int_screen_height" value="1263" type="hidden">
    <input id="str_action_login" name="str_action_login" value="login" type="hidden">
    
        <div id="principal" style="width: 400px; position: relative; top: 543px; left: 999.5px;">
            <div id="div_login" class="ui-widget ui-widget-content ui-corner-all caliBloc-container" style="float: none;">
                <div role="titre" class="ui-widget-header ui-corner-top caliBloc-entete" style="text-align: left;"><img src="profils/default/img/logomaison.png" class="logo">XXXX<div role="toolbar" class="ui-widget-header caliBloc-toolbar" style="display: none;"></div></div><div role="confirm" style="display: none; cursor: pointer;" class="ui-widget caliBloc-contenu ui-state-highlight" title="Double-cliquez pour masquer ces messages"></div>
                <div role="contenu" class="ui-widget caliBloc-contenu">
                    <div role="alerte" class="ui-widget caliBloc-contenu ui-state-error" title="Double-cliquez pour masquer ces messages" style="cursor: pointer; display: none;"></div>
                    <p><label for="login">Identifiant</label><input id="str_login" name="str_login" value="" class="ui-state-default" type="text"></p>
                    <p><label for="password">Mot de passe</label> <input id="str_password" name="str_password" value="" class="ui-state-default" type="password"></p>
                    <p class="actions"><button type="submit" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" role="button" aria-disabled="false"><span class="ui-button-text">Se connecter</span></button></p>
                </div>
                <div class="copyright">XXXX</div>
            </div>
            <span style="display:block;font-size:12"><a href="../pwd/renvoi.php">Mot de passe oublié / renvoi de mot de passe</a></span>
        </div>
    </form>
    Ensuite grâce à votre aide et à cette page et celle ci :
    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
            Dim ID As String = "str_login=XXXX", MDP As String = "str_password=XXXX"
            Dim Source As String = "http://extranet-xxxxx.com/app/Effectifs/adherent.php?isw=2400&ish=1263&sid=tM6HGmRvZPFaSK4jx3dr"
            Dim RequeteWeb As Net.WebRequest = Net.WebRequest.Create(Source)
            Dim Donnees As String = ID & MDP
            Dim ByteArray As Byte() = Text.Encoding.UTF8.GetBytes(Donnees)
            RequeteWeb.Method = "POST"
            RequeteWeb.ContentLength = ByteArray.Length
            RequeteWeb.ContentType = "application/x-www-form-urlencoded"
            Dim DataStream As Stream = RequeteWeb.GetRequestStream
            DataStream.Write(ByteArray, 0, ByteArray.Length)
            DataStream.Close()
            Dim ResponseWeb As Net.WebResponse = RequeteWeb.GetResponse
            MsgBox(CType(ResponseWeb, Net.HttpWebResponse).StatusDescription)
            DataStream = ResponseWeb.GetResponseStream
            Dim Reader As New StreamReader(DataStream)
            Dim ResponseString As String = Reader.ReadToEnd
            Reader.Close()
            DataStream.Close()
            ResponseWeb.Close()
    La propriété StatusDescription me renvoie la chaine "OK"
    La chaine ResponseString quant à elle contient un code html correspondant à celui de la page d'accueil du site concerné.

    Je pense donc que l'authentification est donc réussi.

    Comment ensuite télécharger mon fichier ?

    Merci.

Discussions similaires

  1. Ouverture d'un fichier .PPT à partir d'une page web
    Par zainab2001 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 18/10/2006, 08h27
  2. copier du texte a partir d'une page web??
    Par touki79 dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 30/05/2006, 20h44
  3. Comment ouvrir Word ou Acrobat Reader à partir d'une page web ?
    Par Kuuei dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 17/05/2006, 15h18
  4. executer une commande dos a partir d'une page WEB
    Par wagga84 dans le forum Langage
    Réponses: 1
    Dernier message: 15/03/2006, 11h09

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