HtmlAgilityPackを使用して404エラーページ(ページが存在しない)かどうかを確認する方法

c# html-agility-pack

質問

ここで私はURLを読んで、ページ内の画像を取得しようとしています。私はそれが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プロパティがあり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プロパティは値で設定されています。

 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
 }

更新

AgilityPack APIのアップデートがあります。トリックはまだ同じです:

 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
 }

人気のある回答

使用しているバージョンに注意してください!

私はHtmlAgilityPack v1.5.1を使用しており、 PostRequestHandlerイベントはありません。

v1.5.1では、 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 with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ