2

加载网址时我有这段代码:

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 之前调用这个函数。

有人可以告诉我如何使新功能与我的代码一起使用吗?还有超时。

谢谢。

4

2 回答 2

5

来源: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 秒)

于 2014-09-15T01:23:49.973 回答
0

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

    }
于 2012-09-18T04:41:01.517 回答