¿Cómo puedo agregar un webRequest para establecer el tiempo de espera al cargar un url para documentar en HtmlAgilityPack?

c# html-agility-pack

Pregunta

Tengo este código al cargar la 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); }));

A veces, cuando se está cargando la url, se está demorando mucho tiempo desde que el sitio web en la variable url no responde. Quiero agregar un tiempo de espera, así que digamos que después de X segundos se emitirá un mensaje como "hubo un tiempo de espera".

Ahora HtmlAgilityPack no tiene ninguna propiedad o clase de tiempo de espera. Así que pensé en crear una nueva función en mi Form1 que use webrequest y webresponde y establezca un tiempo de espera en esta nueva función y luego llamar a esta función antes de cargar la url.

¿Alguien me puede mostrar cómo hacer que la nueva función funcione con mi código? También con un timeout.

Gracias.

Respuesta aceptada

No sé nada sobre el tiempo de espera de html agility. Pero lo estoy usando así. Tal vez sea útil para usted. Buena suerte.

    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 "";
        }

    }

Respuesta popular

Fuente: 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/");


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué