HtmlDocument.LoadHtml von WebResponse?

.net c# html html-agility-pack httpwebrequest

Frage

Ich versuche, ein Bild aus einem geposteten Link zu extrahieren, und die erste Überprüfung, die ich mache, besteht darin, festzustellen, ob der Link zu einem einfachen Bild wie diesem gehört:

    HttpWebRequest request;
    WebResponse webresponse;

    request = (HttpWebRequest)HttpWebRequest.Create(url);

     webresponse = request.GetResponse();
     if (webresponse.ContentType.StartsWith("image/"))
       ...

Wenn dies nicht gefunden wird, möchte ich mit dem HTML Agility Pack fortfahren, aber um das ausführen zu können, muss ich folgendes ausführen:

HtmlDocument doc;
reader = new StreamReader(webresponse.GetResponseStream());
doc.LoadHtml(reader.ReadToEnd());

Das Problem ist, dass LoadHtml keine Quelle findet, selbst wenn ich sicher bin, dass es in der Antwort HTML-Code gibt. Ich vermute, dass die HTML-Formatierung nicht korrekt ist?

Hier ist ein Teil dessen, was ReadToEnd generiert:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv">
    <head><title>
        X - Eclipse - 2011
    </title>

        <!--[if lt IE 7]>
        <script defer type="text/javascript" src="../javascript/pngfix.js"></script>
        <![endif]-->
        <!--<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />-->

        <meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" /><link href="../../../App_Themes/X/mainStyleSheet.css" type="text/css" rel="stylesheet" /><meta name="author" content="" /><meta name="copyright" content="X.net" /><meta name="description" content="Välkommen in till ett av Sveriges största Xcommunity." /><meta name="keywords" content="X, rollspel, boardgamegeek, boardgame, X.net, X.net, community, Jimmy, Nilsson, schack, risk, puerto rico" /><script language="javascript" type="text/javascript" src="/sites/X/javascript/common.js"></script><script language="javascript" type="text/javascript" src="/sites/X/javascript/ajaxHandler.js"></script><script language="javascript" type="text/javascript" src="/javascript/jquery.js"></script><link rel="shortcut icon" href="/App_Themes/X/Images/common/browserIcon/favicon.ico" /><link rel="icon" href="/App_Themes/X/Images/common/browserIcon/animated_favicon1.gif" type="image/gif" /></head>
    <body>
        <div id="topBack">
        <div id="siteContainer">
        <form method="post" action="game.aspx?gameId=72125" id="aspnetForm" enctype="multipart/form-data">

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDw....

Ich kann sehen, dass die Zeichenfolge einige Newline (\ r \ n) Befehle enthält, wenn das wichtig ist?

Mein Ziel ist es einfach zu vermeiden, die Webseite mehr als einmal herunterzuladen, sonst könnte ich den WebClient.DownloadString(url); um es in einem Format herunterzuladen, von dem ich weiß, dass es funktioniert.

Akzeptierte Antwort

Das hat funktioniert:

request = (HttpWebRequest)HttpWebRequest.Create(url);
webresponse = (HttpWebResponse)request.GetResponse();
if (webresponse.ContentType.StartsWith("image/"))
{...}
if (webresponse.ContentType.StartsWith("text/html"))
{
     var resultStream = webresponse.GetResponseStream();
     doc.Load(resultStream);
}



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum