如何使用HtmlAgilityPack檢查它是否是404錯誤頁面(頁面不存在)

c# html-agility-pack

在這裡,我試圖閱讀網址並在頁面中獲取圖像。我需要排除頁面,如果它是404並停止從404錯誤頁面獲取圖像。如何使用HtmlAgilityPack?這是我的代碼

var document = new HtmlWeb().Load(completeurl);
var urls = document.DocumentNode.Descendants("img")
          .Select(e => e.GetAttributeValue("src", null))
          .Where(s => !String.IsNullOrEmpty(s)).ToList();

一般承認的答案

您需要在HtmlWeb實例上註冊PostRequestHandler事件,它將在每個下載的文檔之後引發,您將可以訪問HttpWebResponse對象。它具有StatusCode的屬性。

 HtmlWeb web = new HtmlWeb();
 HttpStatusCode statusCode = HttpStatusCode.OK;
 web.PostRequestHandler += (request, response) =>
 {
     if (response != null)
     {
         statusCode = response.StatusCode;
     }
 }

 var doc = web.Load(completeUrl)
 if (statusCode == HttpStatusCode.OK)
 {
     // received a read document
 }

看一下GutHub上HtmlAgilityPack的代碼,它甚至更簡單, HtmlWeb有一個屬性StatusCode ,它的值設置為:

var web = new HtmlWeb();
var document = web.Load(completeurl);

if (web.StatusCode == HttpStatusCode.OK)
{
    var urls = document.DocumentNode.Descendants("img")
          .Select(e => e.GetAttributeValue("src", null))
          .Where(s => !String.IsNullOrEmpty(s)).ToList();
}

更新

AgilityPack API已經有了更新。訣竅仍然是一樣的:

var htmlWeb = new HtmlWeb();
var lastStatusCode = HttpStatusCode.OK;

htmlWeb.PostResponse = (request, response) =>
{
    if (response != null)
    {
        lastStatusCode = response.StatusCode;
    }
};

熱門答案

請注意您使用的版本!

我正在使用HtmlAgilityPack v1.5.1並且沒有PostRequestHandler事件。

v1.5.1中,必須使用PostResponse字段。見下面的例子。

var htmlWeb = new HtmlWeb();
var lastStatusCode = HttpStatusCode.OK;

htmlWeb.PostResponse = (request, response) =>
{
    if (response != null)
    {
        lastStatusCode = response.StatusCode;
    }
};

差別不大但仍然存在差異。

希望這會節省一些時間。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow