加载网址时我有这段代码:
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之前调用此函数。
有人可以告诉我如何让新功能与我的代码一起使用吗? 还有超时。
感谢。
答案 0 :(得分:3)
来源: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/");
答案 1 :(得分: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 "";
}
}