簡體   English   中英

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

[英]How to check if it is 404 error page(page does not exist) using HtmlAgilityPack

在這里,我試圖閱讀網址並在頁面中獲取圖像。 我需要排除頁面,如果它是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;
    }
};

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

希望這會節省一些時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM