none
webclient + gzip ou deflate RRS feed

  • Question

  • bonjour

    j'utilise webclient.UploadStringAsync en vb 2010 pour récupérer des données à partir de quelques sites et je voudrais savoir s'il y a un moyen de décompresser un résultat compressé avec gzip ou deflate
    j'ai cherché partout mais je ne trouve que des résultats pour httpwebrequest et pas pour webclient, je voudrais savoir si c'est possible avec webclient ou pas

    merci d'avance
    • Modifié devtn lundi 30 juillet 2012 03:24
    lundi 30 juillet 2012 03:16

Réponses

  • Bonjour,

    En fait il faut utiliser la méthode UploadDataAsync() :

        Sub Main()
            Dim client As WebClient
            client = New WebClient()
    
            Dim data As String = "data to post"
    
            AddHandler client.UploadDataCompleted, AddressOf OnDataUpload
            client.UploadDataAsync(New Uri("http://lien"), "POST", client.Encoding.GetBytes(data))
        End Sub
    
        Private Sub OnDataUpload(ByVal sender As Object, ByVal e As UploadDataCompletedEventArgs)
            Using compressedStream As Stream = New GZipStream(New MemoryStream(e.Result), CompressionMode.Decompress)
                Using sr As StreamReader = New StreamReader(compressedStream, Encoding.UTF8)
    
                    Dim decompressedData As String
                    decompressedData = sr.ReadToEnd()
    
                End Using
            End Using
        End Sub

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse devtn jeudi 2 août 2012 01:16
    mercredi 1 août 2012 06:56
    Modérateur

Toutes les réponses

  • Bonjour,

    webclient.UploadString ne permet pas de récupérer mais d'envoyer une chaîne...

    Pour décompresser des données binaire au format gzip, il faut utiliser la classe : http://msdn.microsoft.com/fr-fr/library/system.io.compression.gzipstream.aspx

    Pour décompresser des données binaire au format defalte, il faut utiliser la classe : http://msdn.microsoft.com/fr-fr/library/system.io.compression.deflatestream

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 30 juillet 2012 07:09
    Modérateur
  • 
    

    bonjour

    j'utilise UploadStringAsync pour poster des données et récupérer des résultats ...

    merci pour les exemples, y a pas un exemple qui montre comment décompresser le résultat obtenu par webclient ? vue que récupère les données en string ?

    voici mon code:

    Private Sub test() Dim client As New WebClient AddHandler client.UploadStringCompleted, AddressOf strupload client.Encoding = System.Text.Encoding.GetEncoding("UTF-8") With client.Headers ... header End With Dim data As String = "data to post" client.UploadStringAsync(New Uri("http://lien"), "POST", data) End Sub Private Sub strupload(ByVal sender As Object, ByVal e As UploadStringCompletedEventArgs) If e.Error IsNot Nothing Then Return End If If e.Cancelled Then RichTextBox1.AppendText("Annulé") Return End If RichTextBox1.AppendText(e.Result.ToString) end sub



    merci d'avance

    mardi 31 juillet 2012 02:35
  • Bonjour,

    Vous ne pouvez donc pas utiliser la méthode UploadStringAsync(). Vous devez travailler sur des flux d'octets.

    Pour cela utilisez la méthode OpenReadAsync() (http://msdn.microsoft.com/fr-fr/library/ms144211(v=vs.95)) afin d'y ouvrir un flux (Stream) auquel vous pourrez utilisez le DeflateStream ou GZipStream pour décompresser vos données.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    mardi 31 juillet 2012 06:57
    Modérateur
  • merci beaucoup pour votre aide,

    pouvez vous m'aider à utiliser OpenReadAsync pour poster des variables et récupérer le resultats svp ?

    merci encore

    mercredi 1 août 2012 06:34
  • Bonjour,

    En fait il faut utiliser la méthode UploadDataAsync() :

        Sub Main()
            Dim client As WebClient
            client = New WebClient()
    
            Dim data As String = "data to post"
    
            AddHandler client.UploadDataCompleted, AddressOf OnDataUpload
            client.UploadDataAsync(New Uri("http://lien"), "POST", client.Encoding.GetBytes(data))
        End Sub
    
        Private Sub OnDataUpload(ByVal sender As Object, ByVal e As UploadDataCompletedEventArgs)
            Using compressedStream As Stream = New GZipStream(New MemoryStream(e.Result), CompressionMode.Decompress)
                Using sr As StreamReader = New StreamReader(compressedStream, Encoding.UTF8)
    
                    Dim decompressedData As String
                    decompressedData = sr.ReadToEnd()
    
                End Using
            End Using
        End Sub

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse devtn jeudi 2 août 2012 01:16
    mercredi 1 août 2012 06:56
    Modérateur
  • Pour le WebClient, pensez à spécifier la propriété MaxLenght (ou un truc comme ca) si votre fichier est important en taille.

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mercredi 1 août 2012 09:29
  • merci beaucoup Gilles TOURREAU vous avez été d'une très grande aide pour moi, sa fonctionne.

    merci à vous aussi Richard Clark pour le conseil

    jeudi 2 août 2012 01:20