Ich habe diesen Code beim Laden der 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); }));
Manchmal, wenn das Laden der URL dauert es viel Zeit, da die Website in der URL-Variable nicht reagiert. Ich möchte ein Timeout hinzufügen, also sagen wir nach X Sekunden wird eine Nachricht wie "es gab ein Timeout" werfen.
Jetzt hat HtmlAgilityPack keine Timeout-Eigenschaft oder -Klasse. Also dachte ich, eine neue Funktion in meinem Form1 zu erstellen, die webrequest und webresponde verwendet und ein Timeout in dieser neuen Funktion einstellt und dann diese Funktion vor dem Laden der URL aufruft.
Kann mir jemand zeigen, wie man die neue Funktion mit meinem Code arbeiten lässt? Auch mit einer Zeitüberschreitung.
Vielen Dank.
Ich weiß nichts über die Zeitüberschreitung von html
Agility. aber ich benutze es so. Vielleicht ist es hilfreich für dich. Viel Glück.
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 "";
}
}
Quelle: 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/");