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

C# Discussion :

Récupérer la source d'une page web


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 23
    Points : 20
    Points
    20
    Par défaut Récupérer la source d'une page web
    Bonsoir,

    J'ai un problème en ce qui concerne la récupération de la source d'une page web.
    J'utilise une classe que j'ai trouvé sur le net qui me permet notamment de récupérer une source gzippé, voici un lien vers la classe en question :
    http://a-base-de-pimp.fr/c-class-per...-des-page-web/

    La classe fonctionne très bien, je parviens à récupérer ma source correctement.
    Cependant j'ai un problème avec le site suivant : http://anidb.net/
    Lorsque je vais chercher la source trop régulièrement, au bout d'un moment cela ne fonctionne tout simplement plus et fais planter mon programme.
    J'ai contourné le problème de plantage avec un thread, cependant il suffit que cela ne fonctionne plus une fois pour que toutes mes autres tentatives échouent elles aussi. En gros je dois redémarrer mon programme à chaque fois que j'obtiens ce problème...

    Par curiosité, j'ai voulu tester voir si cela pouvait venir de la classe que j'ai récupéré ou bien si cela venait du site. Donc j'ai fais un petit test avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int i = 0;
    while (true)
    {
      i++;
      //GetPageWeb.get("http://www.google.fr");
      GetPageWeb.get("http://anidb.net/");
      Debug.WriteLine("tentative n°"+i);
    }
    Lorsque je récupère la source de google, aucun problème la boucle continue infiniment (Du moins j'ai stoppé le programme à environ 50 tentatives).
    Cependant lorsque je la récupère de anidb, au bout de seulement 2 tentatives cela bug. À chaque fois avec ce test, cela a buggé au bout de 2 tentatives.

    Alors je me suis dis que peut-être ca pouvait être une protection anti-flood sur une IP ou quelque chose de ce genre là du côté du site... Cependant ça n'explique pas pourquoi je dois à chaque fois redémarrer mon programme pour que cela fonctionne à nouveau... Donc il doit y avoir un problème quelque part dans la classe, mais je vois pas du tout d'où ca pourrait venir.

    Autre information qui est peut être importante : la source de anidb est gzippé.

    Voilà, si quelqu'un a une idée, merci d'avance =)

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 766
    Points
    766
    Par défaut
    Tu as essayé de faire une pause entre tes tentatives? D'attendre 1seconde ou plus?

    C'est peut-êtres le serveur web qui te bloque car tu fais trop de demande?
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs. Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Oui j'ai essayé un Thread.Sleep(1000) et plus, ca n'a rien changé, toujours plantage durant la 3ème tentative.
    C'est d'ailleurs ca qui m'a fait penser que le problème venait peut-être pas du site finalement.
    (D'ailleurs si il y avait un blocage de ce genre, on ne pourrait pas ouvrir plein de page de anidb à la suite dans différents onglets, alors que j'y parviens avec firefox)

    Edit :
    Après quelques tests sur la classe, j'ai remarqué que c'est cette ligne qui bug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response = request.GetResponse();
    Par contre je vois toujours pas pourquoi ça bug...

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    J'me permet de remonter ce topic.

    J'ai réussi a contourner ce problème en récupérant d'abord la source via une page web que j'ai faite puis en récupérant la source de cette même page web. Cependant je trouve cette méthode assez sale et ca m'oblige finalement à faire 2 requêtes au lieu d'une.
    Par conséquent si vous avez la moindre idée de l'origine du bug, je cracherais pas dessus

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Points : 92
    Points
    92
    Par défaut
    Je viens de tester ta page web en faisant une boucle de 0 a 10 sans pause, et le contenu est bien téléchargé ... par contre, le contenu écrit n'est pas la source du site :s et n'étant pas expert dans ce domaine, je ne peux pas t'aider plus, mais voici quand même mon code que tu peux tester sur d'autres pages :

    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
     
    for (int x = 0; x < 10; x++)
                {
                    textBox1.Text += "Tentative " + x + "\n";
                    StreamWriter sw2 = new StreamWriter(new FileStream(@"john"+x+".txt", FileMode.OpenOrCreate, FileAccess.ReadWrite), Encoding.UTF8);
     
                    try
                    {
                        HttpWebRequest req = WebRequest.Create("http://anidb.net/perl-bin/animedb.pl") as HttpWebRequest;
                        req.Proxy = new WebProxy("10.7.127.100", 8080);
                        req.Timeout = 10000;
                        req.UserAgent = @"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)";
     
                        String content = string.Empty;
                        using (StreamReader sr = new StreamReader(req.GetResponse().GetResponseStream(), code))
                        {
                            content = sr.ReadToEnd();
                        }
     
                        sw2.Write(content);
                        sw2.Close();
                        req = null;
     
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message + ex.StackTrace);
                    }
                }

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    C'est parce qu'il s'agit d'une source gzippé.
    Il faut la décompresser avant.
    Avec une ligne de ce genre, ca devrais fonctionner (Avec quelques arrangements vu que le getResponse est directement imbriqué avec le reste dans ton code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Stream responseStream = responseStream = req.GetResponseStream();
    responseStream = new GZipStream(responseStream, CompressionMode.Decompress);

Discussions similaires

  1. [AJAX] Récupérer le code source d'une page web
    Par soufian1364 dans le forum AJAX
    Réponses: 1
    Dernier message: 11/12/2012, 17h16
  2. [iOS] Récupérer le code source d'une page web
    Par aliasc dans le forum Objective-C
    Réponses: 6
    Dernier message: 12/01/2011, 12h03
  3. Récupérer le code source d'une page web
    Par hassine dans le forum C#
    Réponses: 6
    Dernier message: 08/11/2010, 11h46
  4. Réponses: 0
    Dernier message: 09/01/2010, 23h07
  5. Récupérer le code source d'une page web
    Par glRaZ dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/12/2004, 09h16

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