Comment puis-je ajouter une requête Web pour définir le délai d'expiration lors du chargement d'une URL à documenter dans HtmlAgilityPack?

c# html-agility-pack

Question

J'ai ce code lors du chargement de l'URL:

private List<string> test(string url, int levels,DoWorkEventArgs eve)
        {
            HtmlWeb hw = new HtmlWeb();
            List<string> webSites;
            try
            {
                this.Invoke(new MethodInvoker(delegate { Texts(richTextBox1, "Loading The Url: " + url + "..." , Color.Red); }));
                doc = hw.Load(url);
                this.Invoke(new MethodInvoker(delegate { Texts(richTextBox1, "Done " + Environment.NewLine, Color.Red); }));

Parfois, lorsqu’il charge l’url, cela prend beaucoup de temps puisque le site Web dans la variable url ne répond pas. Je veux ajouter un délai d'attente, alors disons au bout de X secondes qu'il envoie un message du type "il y avait un délai d'attente".

Maintenant, HtmlAgilityPack n'a pas de propriété ni de classe de délai d'attente. J'ai donc pensé à créer une nouvelle fonction dans mon Form1 qui utilisera webrequonde et webresponde et définira un délai d'expiration dans cette nouvelle fonction puis en appelant cette fonction avant de charger l'URL.

Quelqu'un peut-il me montrer comment faire en sorte que la nouvelle fonction fonctionne avec mon code? Aussi avec un délai d'attente.

Merci.

Réponse acceptée

Je ne sais rien du délai d'attente de l'agilité html . mais je l'utilise comme ça. Peut-être que cela vous est utile. Bonne chance.

    String Data = GetURLData(url);
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(Data);




    public static string GetURLData(string URL)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
            request.UserAgent = "Omurcek";
            request.Timeout = 4000;
            WebResponse response = request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream);
            return reader.ReadToEnd();
        }   

        catch (Exception ex )
        {
            LogYaz("Receive DATA Error : " + URL   + ex.ToString());
            return "";
        }

    }

Réponse populaire

Source: http://blog.jongallant.com/2012/07/htmlagilitypack-set-timeout.html#.VBY-_fmSz3Q

var web = new HtmlWeb();
web.PreRequest = delegate(HttpWebRequest webRequest)
{
     webRequest.Timeout = 4;
     return true;
};
var doc = web.Load("http://www.msn.com/");


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow