Come posso aggiungere una richiesta Web per impostare il timeout durante il caricamento di un url per documentare in HtmlAgilityPack?

c# html-agility-pack

Domanda

Ho questo codice quando carico 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); }));

A volte quando carica l'url sta prendendo molto tempo dal momento che il sito web nella variabile url non risponde. Voglio aggiungere un timeout, quindi diciamo dopo X secondi che verrà visualizzato un messaggio del tipo "c'era un timeout".

Ora HtmlAgilityPack non ha alcuna proprietà o classe di timeout. Così ho pensato di creare una nuova funzione nel mio Form1 che userà webrequest e webresponde e imposteremo un timeout in questa nuova funzione, quindi chiameremo questa funzione prima di caricare l'url.

Qualcuno può mostrarmi come far funzionare la nuova funzione con il mio codice? Anche con un timeout.

Grazie.

Risposta accettata

Non so nulla del timeout di html agility. ma lo sto usando in questo modo Forse è utile per te. In bocca al lupo.

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

    }

Risposta popolare

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché