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 :

Récupération d'une page HTML dans un string


Sujet :

ASP.NET

  1. #1
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut Récupération d'une page HTML dans un string
    Bonjour à tous.

    Je suis complètement rouillé sur .?NET, ça fait 6 ans que j'ai pas programmé sérieusement (et même programmé tout court). Je potasse un outil perso et dans cet outil j'ai besoins de récupérer le contenu d'une page HTML dans une String pour ensuite découper tout cela et mettre des données au bon endroit.
    J'ai ressorti un vieux trucs qui est décrit là : http://pierrejallais.developpez.com/...bRequestVBNet/ mais j'ai un souci pour mettre tout ça dans la variable String. Y a u déclic qui doit pas se faire dans mon vieux cerveau encombré.

    Pourriez vous m'aider ?
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  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
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    quel est le souci exactement ? Le code du tuto ne fonctionne pas ?
    Dans ce code, la ligne qui met la réponse dans une string est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim strContent As String = sr.ReadToEnd()
    Elle est située dans une fonction callback car les requêtes sont faites en asynchrone.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci pour ton aide.

    Le souci que j'ai c'est que je ne vois pas comment je récupère cette String. Pour l'instant ma page ressemble à ça, le codeBehind :
    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
     
    Imports System.Net
     
    Partial Class CapterHereosDraft
        Inherits System.Web.UI.Page
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
        End Sub
    End Class
     
    ' La classe RequestState est utilise pour transmettre l'objet HttpWebRequest 
    ' a travers l'appel asynchrone
    Public Class RequestState
     
        Public Request As HttpWebRequest
     
        Public Sub New()
            Request = Nothing
        End Sub
    End Class
     
    ' Classe effectuant un appel HTTP GET asynchrone ver une URL
    Public Class GetHttpAsync
        Public Shared Sub GetPageHD(ByVal url As String)
            Dim req As HttpWebRequest
            req = CType(WebRequest.Create(url), HttpWebRequest)
            ' Creation de l'objet etat
            Dim rs As New RequestState
            ' On ajoute la requete dans l'objet etat pour pouvoir le recuperer dans la callback
            rs.Request = req
     
            ' Appel asynchrone
            req.BeginGetResponse(New AsyncCallback(AddressOf ResponseCallback), rs)
        End Sub
     
        Private Shared Sub ResponseCallback(ByVal ar As IAsyncResult)
            ' Recuperation l'objet etat 
            Dim rs As RequestState = CType(ar.AsyncState, RequestState)
            ' Recuperation de la requete web (object HttpWebRequest)
            Dim req As HttpWebRequest = rs.Request
            ' Recuperation de la reponse web
            Dim resp As HttpWebResponse = CType(req.EndGetResponse(ar), HttpWebResponse)
     
            Dim responseStream As Stream = resp.GetResponseStream()
            Dim sr As StreamReader = New StreamReader(responseStream, Encoding.UTF8)
            Dim strContent As String = sr.ReadToEnd()
     
            responseStream.Close()
        End Sub
    End Class
    Et dans la partie HTML j'ai placé une TextBox et je voudrais mettre le contenu le page cible dans cette TextBox. C'est pour tester la chose uniquement, ce n'est pas le but de la page.
    Et donc, je n'arrive pas à comprendre comment je récupère la chaine à partir du CallBack ou du GetPage.
    Mais je me suis peut-être planté dans le Class aussi, comme j'ai dit, ça fait un bout de temps que j'ai pas codé.

    Encore merci.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  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
    Points : 3 570
    Points
    3 570
    Par défaut
    Dans l'idée il faudrait que ton callback ait accès à ta TextBox. Maintenant je me dis que l'async est peut-être pas une bonne idée : pas sûr que la réponse à ta requête arrive avant que tu ne finalises ta réponses vers le client. As-tu essayé avec une requête synchrone ?
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Pour ne rien te cacher j'avoue que le CallBack, les requêtes synchrone/asynchrone, tout ceci m'échappe un peu.
    Par contre, je farfouillé le net et j'ai trouvé un truc qui doit â synchrone, je pense et qui a'air de marcher.
    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
     
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim strHD As String = RetournerChaine("http://heroesdraft.com/view/62686")
     
            txtString.Text = strHD
     
        End Sub
     
        Protected Function RetournerChaine(ByVal url As String) As String
            Dim result As String
     
            Dim webrequest As HttpWebRequest = DirectCast(HttpWebRequest.Create(url), HttpWebRequest)
            webrequest.Method = "GET"
            webrequest.ContentLength = 0
     
            Dim response As WebResponse = webrequest.GetResponse()
     
            Using stream As New StreamReader(response.GetResponseStream())
                result = stream.ReadToEnd()
            End Using
            Return result
        End Function
    Et du coup, dans ma strHD j'ai ma chaine maintenant je vais pouvoir la découper en petit bout pour trouver les infos qui m'intéresse dedans.

    Quoi qu'il en soit, merci beaucoup pour ton aide.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Si tu as besoin d'analyser du HTML, je te conseille d'utiliser la librairie HtmlAgilityPack.

    Voici un exemple pour charger une page HTML :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim website As New HtmlWeb
    Dim doc = website.Load("http://heroesdraft.com/view/62686")
    Ensuite tu peux naviguer dans le HtmlDocument comme dans un fichier XML :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each link As HtmlNode In doc.DocumentNode.SelectNodes("//a")
        Console.Write(link.InnerText)
        Console.Write(" - ")
        Console.Write(link.Attributes("href").Value)
    Next
    Dans l'exemple ci-dessus on navige dans les liens, et on affiche dans la console le texte du lien ainsi que son URL.

    Tu trouveras pas mal d'exemples en cherchant "HtmlAgilityPack VB.NET" sur ton moteur de recherche prefere

    [EDIT] J'ai modifie le premier bloc de code.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    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
    Points : 3 570
    Points
    3 570
    Par défaut
    Re,

    pour le syn/async c'est vraiment pas compliqué :
    - synchrone : ton programme s'arrête tant qu'il n'a pas reçu la réponse de ta requête HTTP,
    - asynchrone : ton programme poursuit (jusqu'à la clôture de ta réponse au client certainement), quand tu obtiens enfin la réponse à ta requête c'est une fonction qui la gèrera (le callback).

    Si ton traitement sur la réponse est un peu long tu peux envisager le deuxième cas, mais ça va demander pas mal de dev pour faire discuter ton client en async (Ajax + timer ou websocket).
    Plus je connais de langages, plus j'aime le C.

  8. #8
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci beaucoup pour vos compléments d'information.

    Bonne journée à tous les deux.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

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

Discussions similaires

  1. [VBA Excel] Récuperer le code source d'une page html dans un string
    Par viniboy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/07/2006, 20h11
  2. Impression d'une page HTML dans un JTextPane
    Par sozie9372 dans le forum Composants
    Réponses: 1
    Dernier message: 06/12/2005, 04h22
  3. Ouvrir une page html DANS Access
    Par Orakle dans le forum Access
    Réponses: 3
    Dernier message: 30/11/2005, 10h22
  4. [vb.net][html] afficher une page html dans une interface vb?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/09/2005, 18h31
  5. inclure une page html dans une autre
    Par jani dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/08/2005, 20h28

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