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

ASP.NET Discussion :

Télécharger la réponse du WebRequest


Sujet :

ASP.NET

  1. #1
    Invité
    Invité(e)
    Par défaut Télécharger la réponse du WebRequest
    Bonjour,
    Je n'arrive pas à télécharger la réponse du WebRequest.

    Enfaite j'envoi une requête sur un serveur qui va lire les donnés d'un fichier (app, ...) en bytes et qui les envoi; sur un navigateur cela démarre un téléchargement.

    Voici ma fonction Request ou j'essaye de télécharger la réponse (la réponse est le code source html et donc dans mon cas la fonction crash)
    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
       Function _HTTPRequest(ByVal url As String, ByVal post As String) As String
            Dim request As WebRequest = WebRequest.Create(url)
            ' Set the Method property of the request to POST.
            request.Method = "POST"
            ' Create POST data and convert it to a byte array.
            Dim postData As String = post
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
            ' Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded"
            ' Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length
            ' Get the request stream.
            Dim dataStream As Stream = request.GetRequestStream()
            ' Write the data to the request stream.
            dataStream.Write(byteArray, 0, byteArray.Length)
            ' Close the Stream object.
            dataStream.Close()
            Console.Write(byteArray)
            ' Get the response.
            Dim response As WebResponse = request.GetResponse()
            ' Display the status.
            Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
            ' Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream()
            ' Open the stream using a StreamReader for easy access.
            Dim reader As New StreamReader(dataStream)
            ' Read the content.
            Dim reponse As String = reader.ReadToEnd()
            ' Display the content.
            Console.WriteLine(reponse)
            ' Clean up the streams.
            reader.Close()
            dataStream.Close()
            response.Close()
     
            Return reponse
        End Function
    J'ai donc cherché une fonction pour télécharger la réponse de la requête, j'en ai trouvé une en C# donc je l'ai convertie en VB :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    Function DownloadFile(ByVal remoteFilename As String, ByVal localFilename As String)
            ' Function will return the number of bytes processed
            ' to the caller. Initialize to 0 here.
            Dim bytesProcessed As Integer
     
            ' Assign values to these objects here so that they can
            ' be referenced in the finally block
            Dim remoteStream As Stream
            Dim localStream As Stream
            Dim response As WebResponse
            Dim request
            ' Use a try/catch/finally block as both the WebRequest and Stream
            ' classes throw exceptions upon error
            ' Try
            '{
            '// Create a request for the specified remote file name
            request = WebRequest.Create(remoteFilename)
            If Not request Is Nothing Then
                '// Send the request to the server and retrieve the
                '// WebResponse object
                response = request.GetResponse()
     
                If Not response Is Nothing Then
                    '// Once the WebResponse object has been retrieved,
                    '// get the stream object associated with the response's data
                    remoteStream = response.GetResponseStream()
     
                    '// Create the local file
                    localStream = File.Create(localFilename)
     
                    '// Allocate a 1k buffer
                    Dim buffer As Byte() = New Byte(1024) {} 'String(CChar(" "), 1024)
     
                    Dim bytesRead As Integer
     
                    '// Simple do/while loop to read from stream until
                    '// no bytes are returned
                    While (bytesRead > 0)
                        '// Read data (up to 1k) from the stream
                        bytesRead = remoteStream.Read(buffer, 0, Len(buffer))
     
                        '// Write the data to the local file
                        localStream.Write(buffer, 0, bytesRead)
     
                        '// Increment total bytes processed
                        bytesProcessed += bytesRead
                    End While
                End If
            End If
            'catch(Exception e)
            'Console.WriteLine(e.Message)
            ' Finally
     
            '// Close the response and streams objects here
            '// to make sure they're closed even if an exception
            '// is thrown at some point
            If Not response Is Nothing Then response.Close()
            If Not remoteStream Is Nothing Then remoteStream.Close()
            If Not localStream Is Nothing Then localStream.Close()
     
            '// Return total bytes processed to caller.
            Return bytesProcessed
        End Function
    Mais cela n'as rien donné comme cette fonction n'envoi pas de requête post et que j'en ait besoin :/

    J'espère que j'ai donné assez de renseignements


    Cordialement, d3mon.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ce serait pas plus simple avec un WebClient ?

    WebClient.DownloadData
    WebClient.DownloadString
    WebClient.DownloadFile

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse.
    Le problème est que ces fonctions sont applicables lorsque l'on a l'adresse du fichier que l'on veux télécharger...

    Dans mon cas il faut que je fasse une requête pour obtenir le string du fichier mais je ne sais pas comment faire une requête qui télécharge directement le lien.

    Edit : J'ai essayé les fonctions WebClient mais je ne vois pas ou le fichier se trouve une fois le téléchargement complété ... (où bien ça ne marche pas)

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par d3mon Voir le message
    Edit : J'ai essayé les fonctions WebClient mais je ne vois pas ou le fichier se trouve une fois le téléchargement complété ... (où bien ça ne marche pas)

    ben c'est toi qui dit où tu le télécharges :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim wc As New WebClient()
    wc.DownloadFile("http://www.unsite.com/repertoire/fichier.txt", "D:\repertoire\fichier.txt")
    Si tu utilises DownloadString ou DownloadData, ça te renvoie une string ou un tableau de byte, dont tu fais ce que tu veux...

    Ou alors j'ai pas compris ton problème ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Hé bien c'est qu'il n'y a pas d'url pour le fichier à télécharger c'est un stream qui est envoyé par le serveur qu'il faut télécharger à la suite d'une requête.

    C'est pour cela que je demande comment faire une requête (résolu) puis télécharger la réponse qui est le stream

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par d3mon Voir le message
    Hé bien c'est qu'il n'y a pas d'url pour le fichier à télécharger c'est un stream qui est envoyé par le serveur qu'il faut télécharger à la suite d'une requête.
    en HTTP tu as toujours une URL... le stream à télécharger c'est le contenu de la réponse

  7. #7
    Invité
    Invité(e)
    Par défaut
    Je vais essayer d'être plus précis. C'est un site ou il faut avoir un compte (pas important), ensuite sur une page tu entres un lien puis tu cliques sur un bouton qui va envoyer une requête. Ensuite le téléchargement commence, quand je regarde le lien ça me donne l'url du php ou j'ai fait la requête. Enfaite le serveur va lire directement le fichier d'un autre site et l'envoyer en stream pour permettre le téléchargement et la seule chose que je peux avoir c'est le stream.

    C'est assez complexe mais je suis sur que c'est réalisable. Je ne peux pas être plus précis que cela :/

Discussions similaires

  1. [AJAX] IE veut me télécharger la réponse JSON
    Par Jean R. dans le forum jQuery
    Réponses: 1
    Dernier message: 02/10/2013, 15h56
  2. Réponses: 2
    Dernier message: 20/08/2008, 16h21
  3. [Kylix] composants à télécharger de kylix
    Par yacomor dans le forum EDI
    Réponses: 2
    Dernier message: 15/10/2002, 19h48
  4. [Kylix] Télécharger Kylix 3 Open Edition
    Par RDM dans le forum EDI
    Réponses: 2
    Dernier message: 27/08/2002, 11h28
  5. Réponses: 0
    Dernier message: 07/05/2002, 12h58

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