Как я могу добавить webRequest для установки тайм-аута при загрузке URL-адреса документа в HtmlAgilityPack?

У меня есть этот код при загрузке 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); }));

Иногда, когда он загружает URL-адрес, это занимает много времени, поскольку веб-сайт в переменной URL-адреса не отвечает. Я хочу добавить тайм-аут, скажем, через X секунд он выдаст сообщение типа «был тайм-аут».

Теперь у HtmlAgilityPack нет свойства или класса тайм-аута. Поэтому я подумал создать новую функцию в моем Form1, которая будет использовать webrequest и webresponde, и установить тайм-аут в этой новой функции, а затем вызвать эту функцию перед загрузкой URL-адреса.

Может кто-нибудь показать мне, как заставить новую функцию работать с моим кодом? Тоже с таймаутом.

Спасибо.


person Daniel Lip    schedule 17.09.2012    source источник


Ответы (2)


Я ничего не знаю о тайм-ауте html аджилити. но я использую вот так. Может быть, это вам поможет. Удачи.

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

    }
person Arzu Zoroğlu Yüce    schedule 18.09.2012

Источник: 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/");

Обратите внимание, что значение тайм-аута - это количество миллисекунд ожидания до истечения времени ожидания запроса. Значение по умолчанию - 100 000 миллисекунд (100 секунд).

person Daniel    schedule 15.09.2014
comment
Обратите внимание, что значение тайм-аута - это количество миллисекунд ожидания до истечения времени ожидания запроса. Значение по умолчанию - 100 000 миллисекунд (100 секунд). docs.microsoft.com/ en-us / dotnet / api / - person rboy; 19.10.2019